有时我提交我的更改,然后突然想起我忘记添加一些注释或做一些简单的格式化,并且做了我做了另一次提交。当需要格式化补丁时,我不希望“小改动”承诺成为一个单独的补丁。我想采取最后两次提交并将它们合并到一个补丁,就像它们是当前状态之间和我开始提交之前的差异一样。
谷歌搜索问题没有帮助。我该怎么做呢?
答案 0 :(得分:1)
如果您尚未推送更改,请使用交互式git rebase并将这些提交标记为修正:
git rebase -i HEAD~5
# opens editor with:
pick deadbeaf commit
fixup abcd123 small change # edit this line to say "fixup", then save and exit editor
pick 3133715 another commit
或者,如果您发现在提交后忘记了一些更改,请将该更改添加到索引并使用git commit --amend
将其添加到HEAD提交
答案 1 :(得分:0)
最简单的方法是使用交互式rebase来压缩这两个提交。如果不完整的提交是A
,并且后续的小修正是提交B
,则给出以下提交图:
---- A --- B (master)
你可以这样做:
git rebase -i A^
这将弹出一个文本编辑器,其中包含有关如何编辑此文件的说明,以便重新排序,删除,编辑或压缩历史记录中的提交。 (在这种情况下,历史记录只是A
的父级之后的所有内容,只有A
和B
。)
您可以将pick
更改为squash
与提交B
对应的行的开头,保存文件,退出编辑器,历史master
将是重写,以便它们是一次提交。
显然,由于这是重写历史记录,如果你已经与任何人分享了这些提交,你应该避免这种情况。
This section of Pro Git提供了有关以这种方式重写历史记录的有用信息。
或者,这是一个足够简单的情况,您可以这样做:
git reset --soft HEAD^
git commit --amend
但是,如果两个提交不在您的分支的顶端,交互式rebase是一种更好的方法。