git 常用命令系列随笔会记录一些用到的常见命令,这里记录一下Bug 分支
:
¶一、git stash
出现 bug 时可以通过一个新的临时分支来修复,修复后合并分支,然后将这个临时分支删除。在 develop 分支上开发的正嗨的时候,突然发现 master 分支上出现了一个 bug,这个时候很自然地想创建一个临时分支 issue01 来修复 bug,但是 develop 分支上的代码还没有提交。并不是不想提交,而是没开发完成,还没法提交。但是线上 bug 刻不容缓。这个时候git stash
就可以登场了:
1、暂存代码:
1 | git stash |
2、切到 master 分支、创建临时分支:
1 | git checkout master |
3、修复后提交,切回 master 分支:
1 | git add . |
4、合并并删除临时分支:
1 | git merge --no-ff -m 'merge issue01 fix bug' issue01 |
两分钟搞定,bug 修复完成了,可以去 develop 分支干活了。
5、恢复暂存的代码,git stash pop
恢复代码的同时也会把暂存的内容也删了:
1 | git checkout develop |
¶二、git cherry-pick
在 master 分支上修复了 bug 后,仔细回忆一下,master 的代码是之前从 develop 分支上合并过去的,所以这个 bug 在 develop 分支上也存在。那在 develop 分支上怎么修复这个 bug 呢?Ctrl C、Ctrl V 再操作一次,提交就可以了?实际上这样操作也可以,但是如果 bug 修复涉及到的文件很多时,这样就有点不优雅了,cherry-pick
命令可以很优雅地解决这个问题。
同样的 bug,要在 develop 上修复,只需要把ad52dcf fix: bug issue01
这个提交所做的修改复制
到 develop 分支。注意:这里只想复制ad52dcf fix: bug issue01
这个提交的内容到 develop 分支,而不是要把 master 分支整个 merge 过来。
1 | git cherry-pick ad52dcf |
不包含 A:
1 | git cherry-pick A..B |
包含 A:
1 | git cherry-pick A^..B |
git 自动给 develop 分支做了一次提交,这次提交不同于 master 分支的ad52dcf
,因为这两个 commit 只是改动相同,但属于两个不同的 commit。用git cherry-pick
,我们就不需要在 develop 分支上手动再把修复 bug 的过程重复一遍。