git add .与git commit -a的区别

123

这两个命令有什么区别:

  • git add .
  • git commit -a

我应该同时执行这两个命令吗?还是说这样做是多余的?


2
参见(虽然不是完全重复):https://dev59.com/lHRB5IYBdhLWcg3wn4UL - CB Bailey
3个回答

163

git commit -a 意思和 git add -u && git commit 几乎相同。

但与 git add . 不同,后者会添加未跟踪且未被忽略的文件,而 git add -u 仅将已被跟踪的文件(包括删除操作)加入到暂存区。

如果不在版本库的根目录下,则存在微妙的差别。 git add -u 会将当前目录及其子目录中的文件更新加入暂存区,等于执行 git add -u . ,而 git commit -a 则会将所有跟踪的文件修改加入暂存区并提交。


4
为了保持一致性,在 Git 2.0 中,[*] 的行为将发生改变。 - user1284631
2
哪个方向?即将commit -a变成像add -u一样,还是add -u变成像commit -a一样? - Miles Rout
5
git add -u 命令将变得和 git commit -a 命令类似;如果你想要的是 git add -u .,就需要明确指定。 - CB Bailey
这是完全一样的,自Git v 2.0开始 git add .表现出不同的行为。 - Nick Volynkin

15

git commit -a 会自动为您添加所有已知的文件,并提交。 您可以使用 git add 来选择要提交的文件。有关更多信息,请参见文档: 这里


14
“它所知道的所有文件”对我来说非常不清楚,特别是因为那些据说没有被添加。 - Nikana Reklawyks
1
@alternative,如果您为“所有已知文件”添加澄清说明,这个答案仍然可以更好。 - Pacerier
2
@Pacerier 相当于 git add -u - alternative
2
@Z.Khullah,所以“all (...)”的意思是“被跟踪的文件”吗? - TheFrost
1
@TheFrost 确切地说! - Bernardo Dal Corno
显示剩余2条评论

2
通过使用git commit命令的-a选项,可以自动“添加”所有已知文件(即所有已列在索引中的文件)的更改。

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