现在我们修改下之前已跟踪过的文件 benchmarks.rb,然后再次运行 status命令,会看到这样的状态报告:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb
#
文件 benchmarks.rb出现在 “Changes not staged for commit” 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区
要暂存这次更新,需要运行 git add命令
现在让我们运行 git add将 benchmarks.rb 放到暂存区,然后再看看git status的输出:
$ git add benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#
重要的事情说三遍:
当原来的文件的状态是:已暂存,然后修改该文件,该文件的状态此时为modified的。之前说过被纳入版本控制管理的文件,有三种状态:未更新,已修改或者已放入暂存区。所以要暂存这次更新,需要将文件的状态更改为已暂存,运行git add 命令。
现在两个文件都已暂存,下次提交时就会一并记录到仓库。假设此时,你想要在 benchmarks.rb里再加条注释,重新编辑存盘后,准备好提交。不过且慢,再运行 git status看看:
$ vim benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
#
# modified: benchmarks.rb
#
怎么回事? benchmarks.rb文件出现了两次!一次算未暂存,一次算已暂存,这怎么可能呢?好吧,实际上 Git 只不过暂存了你运行 git add命令时的版本,如果现在提交,那么提交的是添加注释前的版本,而非当前工作目录中的版本。
所以,运行了 git add之后又作了修订的文件,需要重新运行 git add把最新版本重新暂存起来:
$ git add benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: README
# modified: benchmarks.rb
#