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

4

我正努力理解Git的复杂性。

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

我做了一些更改,然后尝试用"git commit"来提交它们。这似乎没有将更改推送到我的本地存储库(在本地目录".git"中),并且建议我使用"git commit -a"代替。

我想知道为什么要在"git commit"后面加上"-a",以及在Git中"stage"和"commit"之间的区别是什么?

5个回答

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 是指明确提到暂存区并解释它。 - Denys Séguret

6

不是必须的。

-a 选项会要求 git commit 自动添加所有在代码仓库中的文件所做出的更改。

这并不总是你想要的。特别是有时候,你需要进行多次提交以区分变更组。当你想要选择添加什么内容时,通常会在提交之前使用 git add 添加你的更改。


1

git commit -a

是以下命令的简写:

git add file.txt
git commit file.txt

这只是一种更简便的向代码库提交新文件的方式。(文件在提交前必须先被“添加”)

1
"

git -a commit相当于

"
git add . 
git commit

1

如果我们想提交修改过的文件或未跟踪的文件,显然有两件事情要做:

第一件是“暂存”(staging) 第二件是“提交”(commit)

暂存是任何提交过程的中间阶段,当然它是可选的。暂存过程仅是为了防止意外提交。通常,在提交之前,需要暂存任何新的未跟踪文件或任何已跟踪文件中的修改,然后如果我们键入git commit,只有被暂存的文件才会被提交。

简单地说,暂存的主要目的是防止意外提交。如果您使用暂存过程,可以使用git checkout filename在提交之前轻松丢弃任何更改。

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

如果您真的认为不需要暂存,则可以使用git commit -a,它将简单地提交所有当前未跟踪的文件和已跟踪文件中的修改。

建议总是通过暂存来进行操作,因为您可以放弃当前提交中不想要的任何更改。如果使用git commit -a,则无需使用git add filename进行暂存。


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