软件开发中,bug就像家常便饭一样。
有了bug就需要修复,在Git中,由于分支是如此的强大,
所以,每个bug都可以通过一个新的临时分支来修复,
修复后,合并分支,然后将临时分支删除。
当你接到一个修复一个代号101的bug的任务时,
很自然地,你想创建一个分支issue-101
来修复它
但是,等等,当前正在dev上进行的工作还没有提交:
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge
现在,用git status查看工作区,就是干净的(除非有没有被Git管理的文件),因此可以放心地创建分支来修复bug。
git checkout master
git checkout -b issue-101
首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git checkout -b issue-101
Switched to a new branch 'issue-101'
git commit -am “…”
现在修复bug,需要把“Git is free software …”改为“Git is a free software …”,然后提交:
git checkout master
git merge issue-101
git branch -d issue-101
修复完成后,切换到master分支,并完成合并,最后删除issue-101分支:
恢复 stash ( git−stash−pop)(git stash apply)
工作现场还在,Git把stash内容存在某个地方了,但是<mark>需要恢复一下,有两个办法</mark>:
-
一是用
git stash apply
恢复
但是恢复后,<mark>stash
内容并不删除</mark>,你需要用git stash drop
来删除; -
另一种方式是用
git stash pop
,恢复的同时把stash内容也删了:
git stash list
∗∗注意∗∗
- 你可以<mark>多次stash</mark>,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
修复dev
在master分支上修复了bug后,我们要想一想,dev分支是早期从master分支分出来的,所以,这个bug其实在当前dev分支上也存在。
那怎么在dev分支上修复同样的bug?重复操作一次,提交不就行了?
有木有更简单的方法?
有!
git cherry-pick <指针>
( 看链接)
- 《[Git]执行git stash pop时的冲突解决》https://blog.csdn.net/jy692405180/article/details/78520251
廖雪峰一个问题没讲清楚,链接里讲了。
同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只想复制4c805e2 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。
为了方便操作,Git专门提供了一个cherry-pick
命令,让我们能复制一个特定的提交到当前分支:
$ git branch
* dev
master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
-
当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug
,修复后,再git stash pop
,回到工作现场; -
在
master
分支上修复的bug
,想要合并到当前dev
分支,可以用git cherry-pick <commit>
命令,把bug
提交的修改“复制”到当前分支,避免重复劳动。