4

我正试图绕过 Git 的复杂性。

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

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

我想知道为什么我必须在“git commit”后面加上“-a”,git中的“stage”和“commit”有什么区别?

4

5 回答 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

于 2013-01-22T13:42:24.980 回答
6

你不必。

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

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

于 2013-01-22T13:42:23.517 回答
1

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

第一个是“staging” 第二个是“commit”

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

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

看看这个页面: http: //git-scm.com/about/staging-area

如果你真的相信你不需要 staging ,你可以使用git commit -a 它来简单地提交所有当前未跟踪的文件和跟踪文件中的修改。

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

于 2013-01-22T14:08:04.647 回答
1

git commit -a

是以下的简写:

git add file.txt
git commit file.txt

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

于 2013-01-22T13:42:21.970 回答
1

git -a commit相当于

git add . 
git commit
于 2013-01-22T13:42:53.407 回答