为什么我必须使用“git commit -a”而不仅仅是“git commit”?

时间:2013-01-22 13:40:27

标签: git

我正试图围绕Git的复杂问题。

我使用“git clone [url here]”从GitHub下载了一个存储库。

我做了一些更改,试图用“git commit”提交它们。这似乎没有将更改推送到我的本地存储库(在本地目录“.git中),它建议我使用”git commit -a“。

我想知道为什么我必须在“git commit”中附加“-a”,并且git中“stage”和“commit”之间的区别是什么?

5 个答案:

答案 0 :(得分:8)

  

-a--all
  告诉命令自动暂存已修改和删除的文件,但是没有告知git的新文件不会受到影响。

Git有一个临时区域。默认情况下,git commit仅提交添加到该临时区域的数据。 -a开关从工作副本本身提交所有未提交的更改。

暂存区域的想法是您可能不想一次提交所有更改。如果是这种情况,你需要git add要提交的文件 - 或者如果你想要更细粒度,你可以git add -p并只选择要提交的文件中的一些更改。

有一个很好的解释加上一个图像,显示它在GitHub Git教程中的基本工作方式:http://web.archive.org/web/20130519130755/http://learn.github.com/p/normal.html

答案 1 :(得分:6)

你不必。

-a选项要求git commit自动添加您对存储库中文件所做的所有更改。

你并不总是那么想。特别是因为有时您希望进行多次提交以区分更改组。如果要选择要添加的内容,通常在使用git add提交之前添加更改。

答案 2 :(得分:1)

git commit -a

简写:

git add file.txt
git commit file.txt

这是将新文件提交到存储库的一种更简单的方法。 (文件必须在被提交之前“添加”)

答案 3 :(得分:1)

git -a commit相当于

git add . 
git commit

答案 4 :(得分:1)

显然,如果我们要提交修改后的文件或未跟踪的文件,我们必须做两件事

第一个是“升级” 第二个是“提交”

升级是任何提交过程的中间阶段,当然它是可选的。 暂存过程只是为了防止意外提交。一般情况下,在提交之前,任何新的未跟踪文件或任何跟踪文件中的修改都需要暂存,然后如果我们键入git commit,则只能提交暂存的文件。

分段的主要目的只是为了防止意外提交。如果使用登台过程,则在使用git checkout filename提交之前放弃任何更改是很方便的。

查看此页面:http://git-scm.com/about/staging-area

如果您确实认为自己不需要升级,可以使用git commit -a它只会提交所有当前未跟踪的文件以及跟踪文件中的修改。

始终建议您进行暂存,因为您可以放弃当前提交中不需要的任何更改。如果您使用git commit -a,则不必使用git add filename进行暂存