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

时间:2012-12-31 02:13:37

标签: git

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

A
ATest
B
BTest

为了确保我的提交消息与实际更改一致,提交了A并附带说明。不幸的是,我没有将ATest包含在该提交中。

与此同时,仍未提交BBTest

此时最好的方法是什么?我想要:

  1. 还原以前的提交而不影响我当前未提交的文件?
  2. 将同一描述下的另一个文件添加到上一次提交?

3 个答案:

答案 0 :(得分:73)

将新文件添加到上一次提交中:

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

答案 1 :(得分:35)

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

Git-pretty flowchart

1 取自http://justinhileman.info/article/git-pretty/

答案 2 :(得分:5)

将文件添加到上一次提交

如果您已经推送了正在处理的分支机构,请先查看man pages。特别请注意:

  

重新定位(或任何其他形式的重写)其他人根据其工作的分支是一个坏主意:下游的任何人都被迫手动修复其历史记录。

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

查找提交哈希

首先,您需要知道要添加到的提交的提交哈希。这由git log显示。实际上,您希望将 previous 指定为要添加到的。 (您可以将其视为要更改的提交片段的起始索引。)您可以通过运行git log HEAD~n来确保您具有正确的提交。 'n'是一个整数,你递增直到你有正确的提交。或者你可以数数,不是真的。

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

<强>危险下, HEH

现在您已准备好运行git rebase -i HEAD~5。或者无论你的提交哈希是什么。这将打开您喜欢的文本编辑器和要编辑的文件。该文件是rebase命令的待办事项列表。文件中的注释告诉您有哪些选项。只需找到包含要添加的提交的行,然后在该行上将“选择”更改为“编辑”。现在保存并关闭文件。

一旦到达你要编辑的提交,rebase就会停止。运行git status以查看其提供的额外信息。使用git add .或任何文件名添加文件以添加到提交。

然后,做git commit --amend。这将修改您选择编辑的提交。

最后,运行git rebase --continue

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