Git的分支管理(二)
分支管理策略
git 在合并(merge)的时候有两种方式,一种是Fast forward
模式,这种方式是快速模式,删除分支后,会丢掉分支信息。
另外一种是--no-ff
方式(禁止Fast forward
模式),Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
Fast forward
模式:
$ git merge dev
--no-ff
方式:
$ git merge --no-ff -m "merge with no-ff" dev
因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
合并后,我们用git log
看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit
* 7825a50 merge with no-ff
|\
| * 6224937 add merge
|/
* 59bc1cb conflict fixed
...
可以看到,不使用Fast forward
模式,merge后就像这样:
Bug分支
当你在dev分支上工作的时候,忽然要修复一个bug,怎么办?
dev分支上还没有保存,Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge
现在,用git status
查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
首先确定要在哪个分支上修复bug,假定需要在master
分支上修复,就从master
创建临时分支:
$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 6 commits. $ git checkout -b issue-101 Switched to a new branch 'issue-101'
修复bug,提交,删除bug分支。最后再回到dev分支继续干没有干完的活:
$ git checkout dev Switched to branch 'dev' $ git status # On branch dev nothing to commit (working directory clean)
工作区是干净的,刚才的工作现场存到哪去了?用git stash list
命令看看:
$ git stash list stash@{0}: WIP on dev: 6224937 add merge
git把存储的内容放到一个地方去了,可用两种方法恢复:
第一种是git stash apply
恢复,这种恢复之后,那个地方的内容并没有被删除,如果想删的话,还要git stash drop
来删除。
另一种方式是用git stash pop
,恢复的同时把stash内容也删了:
$ git stash pop
再用git stash list
查看,就看不到任何stash内容了。