你如何在head和commit head之间git format-patch -x?

时间:2011-11-03 11:08:44

标签: git

有时我提交我的更改,然后突然想起我忘记添加一些注释或做一些简单的格式化,并且做了我做了另一次提交。当需要格式化补丁时,我不希望“小改动”承诺成为一个单独的补丁。我想采取最后两次提交并将它们合并到一个补丁,就像它们是当前状态之间和我开始提交之前的差异一样。

谷歌搜索问题没有帮助。我该怎么做呢?

2 个答案:

答案 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的父级之后的所有内容,只有AB。)

您可以将pick更改为squash与提交B对应的行的开头,保存文件,退出编辑器,历史master将是重写,以便它们是一次提交。

显然,由于这是重写历史记录,如果你已经与任何人分享了这些提交,你应该避免这种情况。

This section of Pro Git提供了有关以这种方式重写历史记录的有用信息。


或者,这是一个足够简单的情况,您可以这样做:

git reset --soft HEAD^
git commit --amend

但是,如果两个提交不在您的分支的顶端,交互式rebase是一种更好的方法。