运行git add .
,然后再运行git commit -am "commit message"
是否多余?
我能否只运行git add .
,然后再运行git commit -m "commit message"
,或者只运行git commit -am "commit message"
?
运行git add .
,然后再运行git commit -am "commit message"
是否多余?
我能否只运行git add .
,然后再运行git commit -m "commit message"
,或者只运行git commit -am "commit message"
?
Git add
+ git commit -m
只会提交你添加的文件(新文件和之前已追踪的文件),但是 git commit -am
会提交所有追踪文件的更改,但它不会添加新文件。
git commit -am
不会添加未跟踪的文件,但我想指出git add -u
只会添加当前已跟踪的项目(update),并不会添加未跟踪的文件。 - johnny在Git 2.0版本之前,如果您删除了任何已跟踪的文件,则运行git commit -am
不是多余的。请参见下面选项的进一步解释。
只要您在根目录中,并且想要添加所有新文件、修改和删除操作,请选择下面的3)。
1)提交新文件和修改到之前跟踪的文件,但不添加删除操作。
对于Git < 2.0:
$ git add .
$ git commit -m
使用 Git 版本大于等于 2.0:
$ git add --ignore-removal .
$ git commit -m
2) 提交已跟踪的文件的修改和删除,但是不要添加新文件。
$ git commit -am
3) 提交新文件和所有被跟踪的更改过的文件(包括修改和删除)。方法如下:
在 Git < 2.0 版本中:
$ git add .
$ git commit -am
...或者:
$ git add -A
$ git commit -m
使用 Git >= 2.0:
$ git add .
$ git commit -m
git add .
+ git commit -am
等同于 git add -A
吗? - user1322092git add .
+ git commit -am
等同于 git add -A
+ git commit -m
。我已更新我的答案以反映这一点。 - Karl Horky实际上,git commit -a
并非总是多余的,因为它还可以删除文件!例如,您有两个文件:一个已被跟踪,另一个未被跟踪。现在您想要删除已被跟踪的文件(无论在何处),并添加未被跟踪的文件。
因此,您需要删除已被跟踪的文件。如果您只使用git add .
,然后使用git commit
,则会将新文件跟踪起来,但不会从存储库中删除旧文件。
所以你需要执行git rm ...
或使用git commit -a
。
我认为之前的答案中有些人没有看到git add
后面的句号(你原来的问题和一些答案已经被编辑过,以使句号更加清晰可见)。
git add .
会将当前目录(和所有子目录)中的所有文件添加到索引中(除了那些在.gitignore
中被忽略的文件)。
-a
选项添加到git commit
中将包括所有已经被Git跟踪的文件的更改,即使这些更改还没有被添加到索引中。
因此,如果所有文件都已经被Git跟踪,那么这两种方法的效果是相同的。但是,如果有新文件被创建,那么git add .; git commit
会将它们添加到仓库中,而git commit -a
则不会。
git add .; git commit -a
确实是多余的。所有的更改已经被添加到索引中,所以-a
没有任何作用。
git add
时,它意味着他们将想要添加的文件与之一起添加,可以是 . 或文件列表。不管怎样,区别很明显,-am 不会添加任何新文件。 - Tuminoid-a
开关告诉git要将修改的文件暂存以添加 - 它代表“所有”而不是“添加”。如果您想要将新文件中的内容添加到git中,则必须在提交之前使用git add添加它。git add .
,那么它已经添加了当前目录中的所有文件,即新文件和修改的文件。因此,您不需要-a
开关再次暂存内容。所以您可以正确地跟随它使用git -m "msg"
。
git add .
和git commit -a
会完成非常不同的操作。 - user229044