我在首次提交 pull request 的时候,积了有好几个 commit,很凌乱。且 commit message 也没有认真写,经人指出之后我也发现了这个问题,让我 rebase 一下。
之前没接触过 git rebase 这个命令,不知如何下手的时候,导师帮我远程操作了一遍。他将我那些乱七八糟的 commit 合成一个,并且修改了 commmit message,果然世界一下子清静了。这次也让我明白了不要频繁提交的道理,我之前就像是把 github 当成同步网盘来用了,改一点代码就 push 上线。每次 commit 应该有个明确的主题,也方便代码管理和他人 review。
话说回来,我后来也多次偿试了一下 rebase 命令。发现这个命令还是挺有意思的,用好了可以很灵活地进行整理与合并。在使用过程中也遇到了一些问题,在这里记录一下。
用 git rebase 合并 commit
git log
git fetch xxx
git rebase -i HEAD~5
git push origin develop -f
git log 可以来查看 commit 历史,git fetch 拉下来远端代码库但不和本地和并,git rebase -i HEAD~5 可以对最近五次的 commit 进行修改,rebase 之后就进入了一个交互式修改界面,根据提交来操作就好了。但有几个要注意的选项:
p 使用该 commit
f 跳过该 commit
e 修改 commit message
所以,如果要对多个 commit 进行合并的话,就把待合并的 commit 改成 f,只留一个 p。
最后,git push 加参数 -f 强制 push 到远端仓库。
修改commit
git commit --amend
可以对最近一次的 commit 进行修改。但是如果想要对之前多次的 commit 进行修改还得求助于 rebase。
git rebase -i head~3
pick f9173fc Fix wrong name 'path_filename'
pick 3fddde0 Change versiton to 0.2: Add share option
pick 5962845 Change platform section name from [arch-platform-name] to [name:platform]
将要修改commit,就把那行的pick改成e,然后保存退出,这时候会提示
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
按照提示进行修改即可。
最后同样是 push 加 -f 强制提交。