修改不是先前提交的提交[重复]

Posted

技术标签:

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

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

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

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

【问题讨论】:

另见 ***.com/questions/3940266/… 脚本版本。 我已经为此目的创建了一个 Bash 脚本:github.com/colinodell/git-amend-old 安装后,您将像这样使用它:git amend-old abcd123,其中 abcd123 是您要修改的旧提交随着你的阶段性变化。希望有人觉得它有用! 【参考方案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

以上是关于修改不是先前提交的提交[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在提交后修改提交[重复]

当不是你最近的提交时如何压缩你的提交[重复]

Git 签署以前的提交?

PHP避免刷新页面重复提交

不可重复读和幻读的区别

如何检查提交时输入字段是不是为空[重复]