我正努力理解Git的复杂性。
我使用"git clone [url here]"从GitHub上下载了一个存储库。
我做了一些更改,然后尝试用"git commit"来提交它们。这似乎没有将更改推送到我的本地存储库(在本地目录".git"中),并且建议我使用"git commit -a"代替。
我想知道为什么要在"git commit"后面加上"-a",以及在Git中"stage"和"commit"之间的区别是什么?
我正努力理解Git的复杂性。
我使用"git clone [url here]"从GitHub上下载了一个存储库。
我做了一些更改,然后尝试用"git commit"来提交它们。这似乎没有将更改推送到我的本地存储库(在本地目录".git"中),并且建议我使用"git commit -a"代替。
我想知道为什么要在"git commit"后面加上"-a",以及在Git中"stage"和"commit"之间的区别是什么?
-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
不是必须的。
-a
选项会要求 git commit
自动添加所有在代码仓库中的文件所做出的更改。
这并不总是你想要的。特别是有时候,你需要进行多次提交以区分变更组。当你想要选择添加什么内容时,通常会在提交之前使用 git add
添加你的更改。
git commit -a
是以下命令的简写:
git add file.txt
git commit file.txt
git -a commit
相当于
git add .
git commit
如果我们想提交修改过的文件或未跟踪的文件,显然有两件事情要做:
第一件是“暂存”(staging) 第二件是“提交”(commit)
暂存是任何提交过程的中间阶段,当然它是可选的。暂存过程仅是为了防止意外提交。通常,在提交之前,需要暂存任何新的未跟踪文件或任何已跟踪文件中的修改,然后如果我们键入git commit
,只有被暂存的文件才会被提交。
简单地说,暂存的主要目的是防止意外提交。如果您使用暂存过程,可以使用git checkout filename
在提交之前轻松丢弃任何更改。
请查看此页面:http://git-scm.com/about/staging-area
如果您真的认为不需要暂存,则可以使用git commit -a
,它将简单地提交所有当前未跟踪的文件和已跟踪文件中的修改。
建议总是通过暂存来进行操作,因为您可以放弃当前提交中不想要的任何更改。如果使用git commit -a
,则无需使用git add filename
进行暂存。