每次我要提交时都应该将文件添加到git吗?


68

我是git的新手,来自SVN世界。到目前为止,它似乎更有用,但我仍在研究方面。

目前,我的工作流程是这样的:

进行更改> git add。> git commit>输入日志消息

我不明白的是为什么我似乎必须在提交前添加所有文件。他们已经在版本控制之下了吗?为什么git commit告诉我没有对提交进行任何更改,还指出我已修改了文件?它说“已更改但未更新:”。这是什么意思??

抱歉,这很容易,我觉得我缺少一些关键点


5
很好的问题我也发现这很令人困惑。显然,您没有“添加”到项目中,而是添加到了提交中!
Kokodoko

Answers:


54

这使您可以通过编辑来分隔提交。如果您现在只想一次提交一次提交这些文件,然后又一次第二次提交立即提交这些下一个文件,则可以执行以下操作:

git add files_under_one_topic
git commit -m "this is about one thing"

git add files_left_over_to_commit_about_a_completely_different_topic
git commit -m "this is about another thing."

6
甚至比这更远。使用git add -p,您可以在文件中进行某些更改,但不能进行其他更改。
Phil Miller

哇 那真的很强大。很高兴知道这是可能的,我需要几次它可能会变得非常方便!
哈米

22

Git通过使用“暂存”区域进行工作,在该区域中准备将要捆绑在一起的内容作为提交。因此,您确定了要提交的更改集(例如全部或子集),将它们添加到登台区域,然后提交登台区域中的内容。

当您调用时git status,它会向您显示已添加到登台区域的内容(即“要提交的更改”),git正在跟踪的文件中已修改的内容(即“已更改但未更新”),以及您所拥有的任何新文件从未添加过(即未跟踪的文件)。

如果您只想提交已更改的内容,但不包括新创建的文件,则可以使用 git commit -a -m "Comment for modified files already under source control."


4
另外,请注意,如果使用“ git stage”可以代替“ git add”,则可以帮助您直截了当地。
威廉·珀塞尔

这必须是更好的答案之一。
多纳托2015年

最后一个产生错误fatal: Paths with -a does not make sense.
Michael

12

您并不是在将文件置于git控制之下,而是在将它们添加到更改列表中。其他一些SCM(例如perforce)也可以这样做。这对于建立尚不准备提交但要在单独的块中提交的不同更改集非常方便。

您可以通过执行以下操作以更颠覆的方式git commit -a提交-这将提交git知道的有关已更改的所有信息,就像所做的svn commit一样。

(PS。由于您来自svn世界,所以我会提到另一个陷阱,它使我有点循环了-当您时git diff,它只会向您显示当前状态与变更列表中的内容之间的区别,而不是当前状态和上一次提交之间的差异。如果您git diff在添加所有更改的文件(例如git add -u)后立即运行,即使有差异要提交,您也会看到一个空的差异!)


啊,谢谢PS!那绝对是我一直在努力的事情!
哈米
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.