运行git add .
然后git commit -am "commit message"
?
我可以只运行git add .
然后git commit -m "commit message"
,还是只运行git commit -am "commit message"
?
答案 0 :(得分:45)
Git add
+ git commit -m
只提交您添加的文件(新增和以前跟踪过),但git commit -am
会对跟踪文件提交所有更改,但不会添加新文件。
答案 1 :(得分:27)
使用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&gt; = 2.0:
$ git add .
$ git commit -m
答案 2 :(得分:9)
实际上,git commit -a
并不总是多余的,因为它也会删除文件!例如,您有两个文件:一个文件被跟踪,另一个文件没有被跟踪。现在您要删除已跟踪的(无处不在)并添加未跟踪的。
因此您删除了跟踪文件。如果您之后只使用git add .
然后git commit
,它将跟踪新的但不会删除存储库中的旧文件。
因此,您要么执行git rm …
,要么使用git commit -a
。
答案 3 :(得分:4)
我认为之前的一些答案没有看到git add
之后的时期(您的原始问题和一些答案已被编辑以使时间段更清晰)。
git add .
会将当前目录(以及所有子目录)中的所有文件添加到索引中(.gitignore
忽略的除外)。
-a
的{{1}}选项将包括git已经跟踪的文件的所有更改,即使这些更改尚未添加到索引中。
因此,如果git已经跟踪了所有文件,那么这两种方法具有相同的效果。另一方面,如果已创建新文件,则git commit
会将它们添加到存储库,而git add .; git commit
则不会。
git commit -a
确实是多余的。所有更改都已添加到索引中,因此git add .; git commit -a
不执行任何操作。
答案 4 :(得分:1)
-a
开关告诉git将已修改的文件暂存以进行添加 - 它代表'all'而不是'add'。如果您不想将新文件中的内容添加到git中,则必须在提交之前使用git add添加它。
如果您已经完成了git add .
,那么它已经添加了当前目录中的所有文件,即新文件和修改过的文件。因此,您不需要-a
开关来再次播放内容。因此,您可以使用git -m "msg"