如何将文件添加到以前的提交?

在过去的一个小时左右,我修改了文件

A
ATest
B
BTest

为了确保我的提交消息与实际的更改一致,提交了带有描述的 A。不幸的是,我没有将 ATest包含到那个提交中。

同时,仍未提交的是 BBTest

在这一点上,最好的办法是什么:

  1. 恢复以前的提交而不影响我当前未提交的文件?
  2. 在前一次提交中添加同一描述下的另一个文件?
58276 次浏览

向上一次提交添加新文件:

$ git add new-file
$ git commit --amend

如果不想更改提交消息,可以使用 git commit --amend --no-edit

这里有一个有趣的流程图 1,它也非常方便: 它为原始问题和修改后的“如果不是最后一次提交会怎么样?”提供了正确的建议有个问题。

Git-pretty flowchart

摘自《 http://justinhileman.info/article/git-pretty/》

将文件添加到以前的提交中

如果您已经推动了分行的工作,请首先看到 手册。特别是,请注意:

重新设置(或任何其他形式的重写)一个其他人已经基于其工作的分支的基础是一个坏主意: 它的下游任何人都被迫手动修复他们的历史记录。

但是,如果您没有推动您的分支,准备进入 危险区

找到提交散列

首先,您需要知道要添加到的提交的提交散列。这是由 git log显示。实际上,您希望将 副院长提交到要添加到的提交。(您可以将其视为要更改的提交片段的起始索引。)可以通过运行 git log -1 HEAD~n来确保正确的提交。其中 n’是一个整数,可以递增,直到获得正确的提交。或者你可以数数,不是真的。

但是,如果你确实计数,至少确认你有正确的提交与 git log -1 HEAD~5或无论你的计数是。您不应该看到要添加到的提交。

危险, 呵呵

现在可以运行 git rebase -i HEAD~5了,或者使用提交散列代替 git rebase -i hash^。这将打开您最喜欢的文本编辑器和要编辑的文件。该文件是 rebase 命令的 todo 列表。文件中的注释告诉您有哪些选项。只需找到你想要添加到的提交行,并在该行上将‘ pick’改为‘ edit’。现在保存并关闭文件。

一旦到达您让它编辑的提交,rebase 就会停止。运行 git status查看它提供的额外信息。使用 git add .或其他文件名将您的文件分阶段添加到提交中。

然后,执行 git commit --amendgit commit --amend --no-edit(如果不想编辑提交消息)。这将修改您选择编辑的提交。

最后,运行 git rebase --continue

如果有疑问,在 Linux 上可以通过阅读 man git-rebasegit --help rebase输出的文档了解更多信息。