Git 修改未提交的提交';上一次提交不成功

Git 修改未提交的提交';上一次提交不成功,git,Git,我通常会有如下工作流: 将更改提交到一组文件 将更改提交到不同的文件组 意识到我错过了一些属于第一次提交的更改 诅咒 我不能使用git commit--amend,因为这不是我需要更改的最新提交。在不接触第二个提交的情况下,向第一个提交添加更改的最佳方法是什么?您可以使用git-rebase来解决这个问题。运行git-rebase-i sha1~1,其中sha1是要更改的提交哈希。找到要更改的提交,并将“pick”替换为“edit”,如rebase编辑器的注释中所述。从那里继续时,可以编辑该提交

我通常会有如下工作流:

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

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

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


    请注意,这将更改该提交的sha1以及所有子项--换句话说,这将重写从该点开始的历史。你可以这样做,但如果你没有推动,那也没什么大不了的。

    @rspeicher:你可能还想检查'HEAD~N',其中N是你想开始重基的'HEAD'之前的提交次数。我误解了吗?看起来您实际上必须在要更改的提交之前选择一个提交。如果
    sha1
    是要更改的提交的哈希值,则应在rebase命令上指定
    sha1^
    。否则,提交更改不会出现在列表中。最后,修改提交后,必须运行
    git-rebase--continue
    ,以重新应用随后的提交。如果只有一个文件包含未老化的更改,您希望提交到旧的提交,我找到的最简单的方法是1)将文件复制到桌面或其他地方2)
    git stash
    3)
    git-rebase-I sha1^
    4)更改
    pick
    to
    edit
    您要更改的旧提交5)现在您的工作区看起来像在旧提交期间一样,请替换(旧的)使用新文件的副本创建文件6)
    git add path/to/file
    将该文件添加到提交7)
    git commit--amend
    8)
    git rebase--continue
    退出rebase 8)
    git stash pop
    效果非常好<代码>git隐藏;git-rebase-i-sha1~1;吉特藏匿申请;git提交——修改;git rebase——继续;git push--force另请参见脚本版本。我创建了一个Bash脚本,其目的就是:安装后,您可以这样使用它:
    git amend old abcd123
    ,其中
    abcd123
    是您希望通过阶段性更改修改的旧提交。希望有人觉得它有用!