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

问题描述 投票:0回答:3

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

A
ATest
B
BTest

为了确保我的提交消息与实际更改保持一致,请提交

A
并附上描述。不幸的是我没有将
ATest
包含到该提交中。

同时,尚未承诺的是

B
BTest

此时最好的处理方法是什么?我愿意:

  1. 恢复之前的提交而不影响我当前未提交的文件?
  2. 在先前提交的相同描述下添加另一个文件?
git
3个回答
270
投票

要将新文件添加到先前的提交中:

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

如果您不想更改提交消息,可以使用

git commit --amend --no-edit


89
投票

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

Git-pretty flowchart

1 摘自 justinhileman.info/article/git-pretty


40
投票

将文件添加到先前的提交

如果您已经推送了正在处理的分支,请先查看手册页。特别请注意:

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

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

查找提交哈希

首先,您需要知道要添加到的提交的提交哈希。这由

git log
表示。您实际上想要指定要添加到的提交之前。 (您可以将其视为要更改的提交片段的起始索引。)您可以通过运行
git log -1 HEAD~n
来确保您拥有正确的提交。其中“n”是一个整数,您将递增直到获得正确的提交。或者你可以数一下,其实没有。

但是,如果你确实计数,至少确认你有正确的提交

git log -1 HEAD~5
或无论你的计数是什么。您不应该看到要添加到的提交。

危险, 呵呵

现在您已准备好运行

git rebase -i HEAD~5
,或者使用提交哈希来代替
git rebase -i hash^
。这将打开您最喜欢的文本编辑器和要编辑的文件。该文件是 rebase 命令的待办事项列表。文件中的注释告诉您有哪些选项。只需找到包含要添加的提交的行,然后在该行上将“pick”更改为“edit”。现在保存并关闭文件。

一旦到达您告诉它编辑的提交,变基就会停止。运行

git status
查看它提供的额外信息。使用
git add .
或任何文件名暂存要添加到提交的文件。

然后,执行

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

最后,运行

git rebase --continue

如果有疑问,在 Linux 上,您可以通过阅读

man git-rebase
git --help rebase
输出的文档来了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.