【问题标题】:Amend a commit that wasn't the previous commit [duplicate]修改不是先前提交的提交[重复]
【发布时间】:2011-04-25 00:22:05
【问题描述】:

我的工作流程通常如下所示:

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

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

【问题讨论】:

标签: git


【解决方案1】:

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

请注意,这将更改该提交以及所有子项的 sha1 —— 换句话说,这将重写从那时起的历史记录。你可以这样做破坏存储库,但如果你没有推送,那也没什么大不了的。

【讨论】:

  • 我理解错了吗?看来您实际上必须选择一个提交之前要更改的提交。如果sha1 是您要更改的提交的哈希值,您可以在rebase 命令中指定sha1^。否则,更改的提交不会出现在列表中。
  • 最后,完成修改提交后,必须运行git rebase --continue 以重新应用随后的提交。
  • 如果您只有一个带有未暂存更改的文件要提交到旧提交,我发现最简单的方法是 1)将文件复制到桌面或其他东西 2)@987654326 @ 3) git rebase -i sha1^ 4) 在您想要更改的旧提交上将 pick 更改为 edit 5) 现在您的工作区看起来就像在旧提交期间所做的那样,用您制作的副本替换(旧)文件6) git add path/to/file 将该文件添加到提交 7) git commit --amend 8) git rebase --continue 退出 rebase 8) git stash pop
  • 工作就像一个魅力。 git stash; git rebase -i sha1~1; git stash apply; git commit --amend; git rebase --continue; git push --force
猜你喜欢
  • 2021-12-31
  • 2020-04-29
  • 2021-08-30
  • 2020-12-12
  • 2018-09-21
  • 2019-12-27
  • 1970-01-01
  • 2021-01-11
  • 2016-01-11
相关资源
最近更新 更多