`git commit`是否提交未添加的更改

时间:2012-10-20 16:15:42

标签: git

我正在尝试使用Scott Chacon的“Pro Git”一书来学习git。在解释如何对已修改的文件进行分级时(第18页),我理解git add文件已安排提交,然后与git commit一起提交。它提到提交已完成,只有实际提交的更改才会被提交,如果我再次更改文件,我必须在提交之前添加它,以便所有更改都被提交。文字说:

  

事实证明,当您运行git add时,Git会完全按照文件的方式对文件进行分段   如果你现在提交,那么你上次运行git add时的文件版本就像   命令是它将如何进入提交,而不是运行git commit时在工作目录中查找的文件版本。如果在运行git add后修改文件   ,您必须再次运行git add以暂存该文件的最新版本。

但是,我自己尝试时会看到不同的行为:

$ git status              #start clean
#On branch master
nothing to commit (working directory clean)

$ echo "hello" >> README.TXT 
git-question> git add README.TXT #added change to README

$ git status 
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
# 
#   modified:   README.TXT
#

$ echo "good bye" >> README.TXT            #change README after adding
$ git status #now 'hello' is added to be committed but not 'good bye'
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README.TXT
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   README.TXT
#

$ git commit -m "only hello" README.TXT        #commit, i would expect just 'hello' gets commited
[master 86e65eb] only hello
 1 file changed, 2 insertions(+)

$ git status         #QUESTION: How come there's nothing to commit?!
# On branch master
nothing to commit (working directory clean)

所以问题是:git commit不应该只提交git add添加的更改吗?如果是这样,即使我没有添加它,为什么它会进行第二次更改?

1 个答案:

答案 0 :(得分:2)

git commit将提交索引中当前的内容,从而提交您明确添加的内容。

但是,在您的示例中,您正在执行git commit README.TXT,它将提交您指定的文件,即当前文件README.TXT。只需git commit -m "only hello"提交索引。