合并多个Commits,请注意!
总阅读次
合并多个Commits
我们提交Pull Request的时候有时候并不是一个Commit就完成的,往往会做一些修改,然后再提交Commit,通常会走多轮,到最后就可能会有多个Commit,这时候往往需要合并这些Commits为一个,然后Manager帮你Merge。
这时候我们就需要使用git rebase了。
这里我并不打算详解rebase,这是Git book做的事,这里只是记录一下自己做的一个过程。
关于rebase可以参看这几篇文章:
首先git log
查看需要合并的Commits,比如如下形式:
1 | commit 3ade56efc466c093d7e8e25c520293cesedc96cc |
比如说我们需要合并Commit 2-4这三个提交,我们运行1
git rebase -i <SHA-1 of Commit 1> # -i后面的参数为最后一个不需要合并的Commit,这里为Commit 1
然后出现交互框,出现三个pick1
2
3pick ... Commit Message 2
pick ... Commit Message 3
pick ... Commit Message 4
我们将后两个pick改成squash,即:1
2
3pick ... Commit Message 2
squash ... Commit Message 3
squash ... Commit Message 4
这里两个操作的区别是:
- pick的意思是要会选择合并到这个commit
- squash(挤压)的意思是这个commit会被合并到前一个commit
然后输入新的Commit Message,保存,即合并成功,最后看只剩一个Commit了。
最后Push到remote,这时会提示版本不合,因为本地这个进行了合并后,已经比remote老了,这时只需强推即可:1
git push -f <upstream> <localbranch>:<remotebranch>
最后,多个提交就变成了一个提交,可以被merge了。
后悔药
注意,如果出现了什么不想看到的结果或者操作错误,可以使用1
git rebase --abort
进行挽救,即可恢复到rebase之前的状态。
简易方法
如果只需合并两个Commit,且又是最近的两个Commit,其实可以更简单地使用:1
2git reset --soft HEAD^1
git commit --amend
来解决。