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


84

在过去约一个小时内,我修改了文件

A
ATest
B
BTest

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

与此同时,仍然没有承诺是BBTest

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

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

我认为2应该是正常的做法。有什么问题吗?
Adrian Shum

Answers:


140

要将新文件添加到上一个提交:

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

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


3
谢谢。出于好奇,如果知道提交的sha1且提交不是“最后的”提交,那么如何修改提交?
James Raitsev

6
@Jam我说确实努力,不要做那种;-)但是,如果你一定要,单程(不知道这是否是最好的)被提交新文件作为其自身的提交,然后使用git rebase -i重新排序提交和合并新文件提交与其他提交。这对于单独的问题可能很重要。
David Z

3
当这样做git rebase -i的@DavidZ建议,所有你需要做的就是移动新投入最高下面的那个你想将其联合,并更改新的提交的词来squash代替pick
MM

如果我暂存了许多文件,但只想向修订的提交中添加一个文件,该怎么办?
dfrankow 2015年

取消暂存所有已暂存的文件(例如git reset),然后暂存要添加的文件,修改提交,然后再次暂存所有文件。
William Pursell 2015年


12

将文件添加到上一个提交

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

对其他人基于其工作的分支重新建立基础(或进行任何其他形式的重写)是一个坏主意:该分支下游的任何人都必须手动修复其历史记录。

但是,如果您尚未推动分支机构,请准备进入危险区域

查找提交哈希

首先,您需要知道要添加到的提交的提交哈希。这由表示git log。您实际上要要添加的提交之前指定提交。(您可以将其视为要更改的提交切片的起始索引。)您可以通过运行来确保拥有正确的提交git log -1 HEAD~n。其中“ n”是整数,您可以递增直到拥有正确的提交。或者您可以指望,不是真的。

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

危险,嘿

现在您可以开始跑步了git rebase -i HEAD~5。或无论您的提交哈希是什么。这将显示您喜欢的文本编辑器和一个文件进行编辑。该文件是rebase命令的待办事项列表。文件中的注释会告诉您您具有哪些选项。只需找到要添加的提交的行,然后在该行上将“ pick”更改为“ edit”。现在保存并关闭文件。

一旦达到您告诉它进行编辑的提交,重新设置就会停止。运行git status以查看其提供的其他信息。暂存文件以使用git add .或其他文件名添加到提交中。

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

最后,运行git rebase --continue

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


2
关于“查找提交哈希”。无需开始计数。只需使用git log查找您的提交并复制其哈希,然后使用git rebase -i hash^即可基于您之前的提交。
维克多
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.