2009-12-04 51 views
3

Git的报告对我的分支之一以下状态:Git的状态有点混乱

# On branch awesome 
# Changes to be committed: 
# (use "git reset HEAD ..." to unstage) 
# 
#  new file: NEW.txt 
# 
# Changed but not updated: 
# (use "git add ..." to update what will be committed) 
# 
#  modified: NEW.txt 
#

这出现,因为我创造了NEW.txt然后吩咐:

git add NEW.txt

,后来编辑的文件。这是否意味着做git commit将提交我对该文件所做的最新更改,还是应该格外小心?

回答

5

Git版本内容而不是文件。因此,您在git add时将提交下一次提交时的内容。

+0

大胆的陈述澄清了一切,谢谢。 – 2009-12-04 02:09:11

9

Git有一个工作目录一个临时区域(索引)的概念。如果您添加一个新文件,它将被添加到索引中。如果您稍后编辑该文件,则只会在您的工作副本中进行更改。您需要将它添加到索引中,就像您已经存在的文件一样。

因此,简而言之,只有索引中的内容才会被提交。 commit -a将在这里工作,或只是像往常一样编辑时重新添加文件。

4

在上述情况下,如果您执行git commit,您将提交在执行git add(可能只创建空文件)之前所做的更改,而不是之后的更改。您可以使用git diff看到的差异:

git diff 

显示您工作副本指数之间的差异,而

git diff --cached 

显示指数和头部之间的差异。 git diff --cached所示的差异将在git commit上承诺。

+1

要查看索引和HEAD'git diff --staged'之间的差异,也可以更直观一些。 – 2009-12-04 08:46:37