Git入门之分支管理(一)

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).
    

    删除成功。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺平的小菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值