如果我之前添加git,那么git commit -am是多余的吗?

时间:2010-09-02 17:21:52

标签: git

运行git add .然后git commit -am "commit message"

是多余的

我可以只运行git add .然后git commit -m "commit message",还是只运行git commit -am "commit message"

5 个答案:

答案 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"

进行跟进