2013-01-22 176 views
4

我试图围绕着Git的错综复杂的头部。为什么我必须使用“git commit -a”而不是“git commit”?

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

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

我想知道为什么我必须追加“-a” 到 “git的承诺”,并在什么混帐

回答

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

+0

+1用于明确提及暂存区域并对其进行解释。 –

1

git commit -a

“舞台” 和 “提交” 之间的区别是短手:

git add file.txt 
git commit file.txt 

这只是将新文件提交到存储库的一种更简单的方法。(文件必须先“添加”才可以承诺)

6

你不需要。

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

你并不总是那么想。特别是因为有时你想做出多个承诺来区分变更组。当你想要选择要添加的内容时,通常在使用git add之前添加更改。

1

git -a commit显然有我们必须做两两件事等同于

git add . 
git commit 
1

,如果我们要提交修改后的文件或未修复的文件

第一个是“分段” 第二个是“提交”

分段是任何提交旅程的中间阶段,当然它是可选的。 暂存过程仅用于防止意外提交。一般而言,在提交前,如果我们输入git commit,那么所有被跟踪文件中的任何新的未跟踪文件或修改都需要执行,然后再进行提交。

简单来说,升级的主要目的是防止意外提交。如果使用分段进程,在使用git checkout filename提交之前放弃任何更改都很方便。

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

如果你真的认为你不需要升级,就可以使用git commit -a它只会犯被跟踪文件中的所有当前未跟踪文件和修改。

总是建议经历分期,因为您可以放弃任何您不想在当前提交中进行的更改。如果您使用git commit -a,则不必使用git add filename进行分段