我正试图围绕Git的复杂问题。
我使用“git clone [url here]”从GitHub下载了一个存储库。
我做了一些更改,试图用“git commit”提交它们。这似乎没有将更改推送到我的本地存储库(在本地目录“.git中),它建议我使用”git commit -a“。
我想知道为什么我必须在“git commit”中附加“-a”,并且git中“stage”和“commit”之间的区别是什么?
答案 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
进行暂存