2010-10-13 42 views
110

我经常会有类似下面的工作流程:修改提交,这不是以前的承诺

  1. 提交更改一组文件的
  2. 提交更改到不同的文件组
  3. 实现我错过了在属于一些变化第一次提交
  4. 诅咒

我不能利用git commit --amend因为它不是TH e最近需要更改的提交。在不触及第二个提交的情况下将最新提交的更改添加到的最佳方式是什么?

+1

另请参阅http://stackoverflow.com/questions/3940266/edit-the-commit-message-of-any-commit/3940887#3940887了解脚本版本。 – VonC 2010-10-15 09:15:03

+2

我为此目的创建了一个Bash脚本:https://github.com/colinodell/git-amend-old安装完成后,您可以像这样使用它:'git amend-old abcd123',其中'abcd123 '是你想要修改你的阶段性变化的旧承诺。希望有人认为它有用! – 2014-05-27 17:56:41

回答

148

您可以使用git rebase来解决这个问题。运行git rebase -i sha1~1其中sha1是您想要更改的提交散列。找到您想要更改的提交,并用“编辑”替换“选择”,如rebase编辑器的评论中所述。当你从那里继续时,你可以编辑该提交。

请注意,这将改变该提交的sha1以及所有子项 - 换句话说,这将重写该点的历史。你可以打破这样做的仓库,但如果你没有推,这不是什么大不了的事情。

+26

@rspeicher:您可能还想检查'HEAD〜N',而不是'sha1',其中N是您希望开始变形的'HEAD'之前的提交数量。 – 3lectrologos 2010-10-13 18:46:04

+0

看起来像它。谢谢! – 2010-10-13 18:47:13

+0

@ 3lectrologos或任何其他提交方式: – MatrixFrog 2010-11-25 07:54:20