Git入门之分支管理
分支就是创建一个分支指针,并改变HEAD的指针指向,其工作区内容不会发生变化
实战
-
创建
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分支了 -
git switch
切换分支:
git checkout <branch>撤销修改:
git checkout -- <file>我们发现
git checkout有两种作用,实际上,用switch命令切换分支更科学创建并切换到
dev分支$ git switch -c dev直接切换到
master分支$ git switch master -
分支管理策略
前面提到了
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 -
分支策略
分支管理的基本原则:
master分支是稳定的,是用来发布新版本的,平时不在上面干活- 在
dev上干活,即dev分支是不稳的,版本发布时,会将dev分支合并到master上,并由master分支发布 - 团队合作的分支如图所示:

-
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下面将工作现场恢复一下,有两种方法:
- 用
git stash apply恢复,这种方法不会删除stash,需要单独用git stash drop删除 - 用
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分支。 - 用
-
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).删除成功。
本文介绍了Git的分支管理,包括创建、切换和删除分支,以及如何在不同分支间合并代码。重点讨论了Fast-forward模式和--no-ff方式的merge,以及如何处理bug修复和新功能开发(feature分支)的分支策略。还提到了cherry-pick命令用于将特定提交应用到其他分支,以及在团队协作中的分支使用建议。
484

被折叠的 条评论
为什么被折叠?



