Git入门之分支管理(一)

  • Post author:
  • Post category:其他




Git入门之分支管理


分支就是创建一个分支指针,并改变HEAD的指针指向,其工作区内容不会发生变化



实战

  1. 创建

    dev

    分支,然后切换到

    dev

    分支

    $ git checkout -b dev  # git checkout 加上 -b 表示创建并切换
    



    以上命令等同于下面这两句命令

    $ git branch dev
    $ git checkout dev
    


    查看当前分支

    git branch

    , 当前分支前面会标一个

    *



    此时就可以在

    dev

    分支上正常提交

    $ git add <file>
    $ git commit -m 'msg'
    


    切换回

    master

    分支

    $ git checkout master
    


    此时会发现刚才添加的文件不见了,dev分支上的操作,而master指针指向的提交节点没有变化


    下面将

    dev

    分支的工作成果合并到

    master

    分支上

    $ git merge dev
    


    此时会发现在

    dev

    分支的操作出现在

    master

    分支中了



    Git中会出现

    Fast-forward

    信息,即此时是“快进模式”,就是直接将

    master

    的指针指向

    dev

    最新提交的节点上,所以速度非常快.


    下面可以删除

    dev

    分支了

    $ git branch -d dev
    


    查看

    branch

    ,会发现只剩

    master

    分支了


  2. git switch

    切换分支:

    git checkout <branch>

    撤销修改:

    git checkout -- <file>

    我们发现

    git checkout

    有两种作用,实际上,用

    switch

    命令切换分支更科学


    创建并切换到

    dev

    分支

    $ git switch -c dev
    


    直接切换到

    master

    分支

    $ git switch master
    

  3. 分支管理策略

    前面提到了

    Fast forward

    模式,这种模式下删除分支会丢掉分支信息

    强制使用这种模式,Git会在

    merge

    时生成新的

    commit

    ,即可从分支历史上看到分支信息


    下面实战一下

    --no-ff

    方式的

    git merge

    : 创建并切换

    dev

    分支

    *

    $ git switch -c dev
    


    提交新的

    commit

    $ git add <file>
    $ git commit -m 'msg'
    


    切换回

    master

    $ git switch master
    


    准备合并分支,请注意

    --no-ff

    参数,表示禁用

    Fast forward

    $ git merge --no-ff -m "merge with no-ff"
    


    合并后使用

    git log

    查看分支历史

    $ git log --graph --pretty=online --abbrev-commit
    

  4. 分支策略

    分支管理的基本原则:


    1. master

      分支是稳定的,是用来发布新版本的,平时不在上面干活


    2. dev

      上干活,即

      dev

      分支是不稳的,版本发布时,会将

      dev

      分支合并到

      master

      上,并由

      master

      分支发布
    3. 团队合作的分支如图所示:
      在这里插入图片描述

  5. bug分支

    每个分支都可以通过一个新的临时分支来修复,修复后合并分支,然后将该临时分支删除

    比如:你接到一个修复101的

    bug

    任务时,你想要创建一个分支

    issue-101

    来修复它,但是此时你正在

    dev

    上进行的工作还没有完成,无法提交(

    git status

    可以查看当前状态)

    这时就要用到

    stash

    功能了,可以将工作现场“储藏起来”,等以后回复现场后继续工作

    $ git stash
    

    此时用

    git status

    查看工作区是干净的,就可以放心的创建分支来修复

    bug

    先确定在哪个分支上修bug,假定是在

    master

    分支上修复,就从

    master

    创建临时分支:

    $ git checkout master
    $ git checkout -b issue-101
    



    bug

    修复后提交

    $ git add <file>
    $ git commit -m "fix bug 101" 
    # [issue-101 8842ff5] fix bug 101
    # 1 file changed, 1 inserion(+), 1 deletion(-)
    

    修复完成,切换到

    master

    分支,并合并,最后将

    issue-101

    分支删除:

    $ git switch master
    $ git merge --no-ff -m "merged bug fix 101" issue-101
    

    此时

    bug

    就修好了,可以回到

    dev

    分支继续干活了

    $ git switch dev
    $ git status
    

    此时工作区是干净的,查看工作现场:

    $ git stash list
    # stash@{0}: WIP on dev: f52c633 add merge
    

    下面将工作现场恢复一下,有两种方法:



    1. git stash apply

      恢复,这种方法不会删除

      stash

      ,需要单独用

      git stash drop

      删除


    2. git stash pop

      ,恢复的同时把

      stash

      内容也删除了
    $ git stash pop
    

    再用

    git stash list

    就看不到任何

    stash

    内容了:

    $ git stash list
    

    你可以多次

    stash

    ,恢复时先用

    git stash list

    查看,然后恢复指定的

    stash

    $ git stash apply stash@{0}
    


    dev

    分支是从

    master

    分支上分出来的,所以该分支上也同样存在

    bug

    ,重复操作一次太麻烦了,我们可以将

    8842ff5 fix bug 101

    这个提交过的修改复制到

    dev

    分支(注意:只复制做出的修改,而不是将整个

    master

    分支

    merge

    过来)

    Git提供了一个

    cherry-pick

    命令,帮助我们将一个特定的提交到当前分支

    $ git branch
    # * dev
    #   master
    $ git cherry-pick 8842ff5 # 8842ff5这个编号可以通过git reflog查到(HEAD前面的字符串)  
    # [dev 0944c8c] fix bug 101
    # 1 file changed, 1 insertion(+), 1 deletion(-)
    

    此时自动

    commit

    了一个

    0944c8c

    除此之外,我们也可以直接在

    dev

    分支上修复

    bug

    ,然后重放到

    master

    分支上,但是也需要先用

    git stash

    保存现场,才能切换到

    master

    分支。


  6. feature分支

    主要用于新功能的添加,为了不让一些实验性质的代码搞乱主分支,所以每添加一个新功能,最好新建一个

    feature

    分支,开发完成后合并,最后删除该分支。

    你接到了一个new task:开发代号为

    Vulcan

    的新功能,该功能计划用于下一代星际飞船:

    $ git switch -c feature-vulcan
    

    开发完成后:

    $ git add vulcan.md
    $ git status
    $ git commit -m "add feature vulcan"
    

    切回

    dev

    准备合并:

    $ git switch dev
    



    突发情况出现:因经费不足,上级临时通知新功能必须取消

    $ git branch -d feature-vulcan
    # error: The branch 'feature-vulcan' is not fully merged.
    # If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
    

    销毁失败,提示分支还未合并,删除会丢掉修改,强行删除需要使用

    -D

    $ git branch -D feature-vulcan
    #Deleted branch feature-vulcan (was d12cf23).
    

    删除成功。



版权声明:本文为qq_56750227原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。