Git有个工作区,暂存区的概念。(图片来自廖雪峰老师的教程,侵删)
那个隐藏的目录.git就是版本库,版本库中包含了暂存区,和一个Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
当我们git add的时候,其实就是把文件的修改添加到了暂存区
当我们git commit提交更改的时候,实际上就是把暂存区所有内容提交到当前分支,暂存区就没有什么内容了。
Git跟踪并管理的是修改,而非文件。
继续更改我们的Readme.md文件。
$ cat README.MD
This is my first use.
This is my second use.
Git tracks changes.
$ git add README.MD
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.MD
如果此时我们再次进行修改的情况下
$ cat README.MD
This is my first use.
This is my second use.
Git tracks changes.
Git tracks changes of files.
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: README.MD
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.MD
可以看到git status里面,我们第二次的修改是没有git add的。如果此时git commit ,只会提交第一次已经git add的修改。
git diff HEAD – [file]命令可以让我们查看工作区和版本库里最新版本的区别,这里看到工作区的版本多了”Git tracks changes of files.”这句话,而版本库里的没有这句,可见第二次修改确实没有被提交。
$ git diff HEAD -- README.MD
diff --git a/README.MD b/README.MD
index 4c74693..1987615 100644
--- a/README.MD
+++ b/README.MD
@@ -1,3 +1,4 @@
This is my first use.
This is my second use.
Git tracks changes.
+Git tracks changes of files.
把我们的第二次修改提交上去,就得提前也git add一下。
$ git commit -m "commit changes"
[master 9adb428] commit changes
1 file changed, 1 insertion(+)
xiaoyang@sunshine MINGW64 /e/GitRepsitory/LearnGit (master)
$ git status
On branch master
nothing to commit, working tree clean