在“git add”之后修改文件

22

场景

由于提交过程中运行的PHPMD和PHPCS检查,我经常需要修改已经受到“git add”影响的文件。

如果我修改一个已添加的文件,并重试提交,更改不会被识别,因此提交将再次失败。

然后我需要“git reset”文件以取消添加,然后重新“git add”它们并再次运行提交。

问题

是否有一种方法可以更新为提交暂存的文件,而无需取消添加并重新添加它们?

如果这是重复内容,请原谅。所有我的搜索似乎仅显示与类似单词存在不同问题的结果。


2
只需再次使用 git add 命令即可,无需重置。 - Sascha Wolf
1
Git本身对于在中止提交后重新git add文件是完全没有问题的(我猜测您有一个预提交钩子来停止提交)。也许您的检查脚本存在一些问题。 - torek
@torek - 你说得对,提交在实际执行之前就被中止了。谢谢! - Alec
@Zeeker - 太完美了。我甚至没有考虑过,但它完美地运作了。谢谢! - Alec
4个回答

37

在 Git 中,文件本身并没有被暂存,而是它们的改动被暂存。因此,当你执行 git add <filename> 命令时,暂存的是该文件的当前状态。如果你修改了该文件并希望将这些变更也添加到暂存区中,只需再次执行 git add 命令即可。


9
您只需再次使用git add命令将文件添加到提交列表中,然后进行提交。

谢谢。我并没有考虑到这一点,因为即使在我进行了新更改之后,文件仍然是绿色的(即仍处于暂存状态)。 - Alec

5
有没有一种方法可以更新已经暂存的文件,而不需要取消暂存再重新添加呢?
无需取消暂存再重新添加。
只需要再次添加该文件即可。
git add file

在修改添加的文件后,当您查看git status -s时。
MM filename

所以当您再次添加它时,它将变为:
git add filename
git status -s
M  filename

2

如其他答案和您自己所述,git add应该有效。然而,我认为您已经有一个有效的提交(未通过某些测试),另外使用git addgit commit只是将新的提交添加到您的分支中。故障提交仍然存在并失败。这里有一堆解决方案可供选择。目前我想到两个例子:

git rebase --interactive HEAD~2 

这将为您提供一个编辑器窗口,您可以在其中将两个提交压缩成一个。只需将第二次提交前面的pick更改为f或s并保存文件即可。

另一种方法是使用git commit --amend

这将允许您修改最后一次提交。但是,我建议阅读两者的文档。


好的建议(但请阅读手册)。一般来说,如果一个或两个提交是适当的取决于第二个更改是什么;是对第一个更改的更正,还是足够独立以需要自己的提交消息。 - drRobertz
好东西。Mess Detector和Code Sniffer在提交执行之前就将其无效,因此实际上不会运行提交,并且更改在此时仍处于暂存状态。 - Alec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接