修改不是先前提交的提交

Rob*_*her 140 git

我经常会有如下工作流程:

  1. 提交对一组文件的更改
  2. 提交对不同文件组的更改
  3. 意识到我错过了第一次提交中的一些更改
  4. 诅咒

我无法使用,git commit --amend因为它不是我需要更改的最新提交.在不触及第二次提交的情况下,将更改添加到第一次提交的最佳方法是什么?

Dae*_*yth 184

你可以git rebase用来解决这个问题.运行git rebase -i sha1~1其中sha1是要更改的哈希值.找到要更改的提交,并将"pick"替换为"edit",如rebase编辑器的注释中所述.当您从那里继续时,您可以编辑该提交.

请注意,这将更改该提交的sha1以及所有子项 - 换句话说,这会从该点向前重写历史记录.你可以破坏存储库这样做,但是如果你还没有推动,那就不是什么大不了的了.

  • 工作就像一个魅力.`git stash; git rebase -i sha1~1; git stash apply; git commit --amend; git rebase - 继续; git push --force` (43认同)
  • @rspeicher:你可能还想检查'HEAD~N'而不是'sha1',其中N是你想要开始你的rebase的'HEAD'之前的提交次数. (28认同)
  • 我误解了吗?看来你实际上必须在*之前选择一个你要改变的提交*.如果`sha1`是要更改的提交的哈希值,则在rebase命令中指定`sha1 ^`.否则,更改提交不会出现在列表中. (14认同)
  • 最后,当完成修改提交时,必须运行`git rebase --continue`来重新应用后面的提交. (8认同)
  • 如果你只有一个文件包含你想要提交给旧提交的非分段更改,我发现最简单的方法是1)将你的文件复制到桌面或其他东西2)`git stash` 3)`git rebase - 我sha1 ^`4)在你想要更改的旧提交上将`pick`更改为`edit` 5)现在你的工作区看起来像在旧提交期间一样,用你做的副本替换(旧)文件新文件6)`git add path/to/file`将该文件添加到提交中7)`git commit --amend` 8)`git rebase --continue`退出rebase 8)`git stash pop` (2认同)
  • @snlehton你应该回答这个问题;博士回答! (2认同)