我正在尝试使用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
添加的更改吗?如果是这样,即使我没有添加它,为什么它会进行第二次更改?
答案 0 :(得分:2)
git commit
将提交索引中当前的内容,从而提交您明确添加的内容。
但是,在您的示例中,您正在执行git commit README.TXT
,它将提交您指定的文件,即当前文件README.TXT
。只需git commit -m "only hello"
提交索引。