我是git的新手,来自SVN世界。到目前为止,它似乎更有用,但我仍然在解决问题。
目前,我的工作流程是这样的:
进行更改> git add。 > git commit>输入日志消息
我不明白为什么我似乎必须在提交之前添加所有文件。他们已经受版本控制了吗?为什么git commit告诉我没有添加到提交的更改,但是也指出我已经修改了文件?它说“已更改但未更新:”。这是什么意思??
对不起,如果这很容易,我觉得我错过了一些重要的观点
答案 0 :(得分:44)
这允许您通过编辑分隔提交。如果你现在只想提交这些文件,在一次提交下,然后现在提交这些文件,在第二次提交下,你可以这样做:
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."
答案 1 :(得分:19)
Git通过使用“临时”区域来工作,您可以在其中准备要作为提交捆绑在一起的内容。因此,您决定要提交哪些更改集(例如,全部或子集),将它们添加到暂存区域,然后提交暂存区域中的内容。
当您调用git status
时,它会显示已添加到暂存区域的内容(即“要提交的更改”),git正在跟踪的文件中已修改的内容(即已更改但未更新) ),以及之前从未添加的任何新文件(即未跟踪文件)。
如果您只想提交已更改的内容,但不包含新创建的文件,则可以使用git commit -a -m "Comment for modified files already under source control."
答案 2 :(得分:12)
你没有添加文件,因为你将它们放在git控件之下,但是你将它们添加到更改列表中。其他一些SCM(如perforce)也可以这样做。它对于构建您尚未准备好提交的不同更改集非常方便,但您希望在单独的块中提交。
你可以通过简单地执行git commit -a
以更加颠覆性的方式提交 - 这将提交git知道的所有已经改变的内容,就像svn commit
那样。
(PS。既然你是来自svn世界,我会提到另一个让我陷入困境的问题 - 当你git diff
时,它只会显示你之间的差异当前状态和更改列表中的内容,而不是当前状态和上次提交之间的差异。如果在添加所有更改的文件(例如git diff
)后立即运行git add -u
,您将看到一个空的差异,即使有差异要提交!)