这一节里主要讲到如何对Git的修改进行详细的管理。Git之所以优秀,很重要的一个原因就是它追踪修改的粒度很细。先看这样一个例子,还是在之前的文件中添加一句话。然后执行add操作添加到暂存区:
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: huper.txt
这样的结果意料之中,但是这个时候我们先不急着提交,如果继续对文件进行另外一个修改后再提交,结果如下:
$ git commit -m "update"
[master fa57a4e] update
1 file changed, 1 insertion(+)
注意到我们事实上应该是有两次插入操作,但是这个时候附加信息里显示的却是1 insertion,并且我们如果用status命令查看会发现的确有个修改没有被添加:
$ git status
On branch master
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: huper.txt
no changes added to commit (use "git add" and/or "git commit -a")
这个例子其实充分反映了Git强大的修改管理力度,事实上在使用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。这里用我们还可以用git diff命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- huper.txt
diff --git a/huper.txt b/huper.txt
index f5df9a1..c70c748 100644
--- a/huper.txt
+++ b/huper.txt
@@ -4,4 +4,4 @@ added version 1.
added version 2.
added version 3.
added stage test.
-added change test.
+added change test append.
上面最后两句显示的就是最近的一次修改,我添加了一个append,这个修改还没有提交,所以diff会在这个地方使用-和+的标志来表示这里添加了一个东西。所以这里一定要继续git add再git commit,也可以在第一次commit之前先git add然后再统一git commit。
总结:
add操作非常重要,每次修改之后一定要进行add操作。
git diff HEAD 查看工作区与版本库(保存已经commit过的版本)中文件的差别。