Git 的文件状态是其核心,明白文件状态后对各种操作都有非常大的帮助,不同的文件状态又存储在不同的工作区域中。
文件状态
未跟踪(untracked):表示文件为新增加的。
已缓存(staged):缓存区的文件都是这个状态。
已提交(committed):表示文件已保存在版本库中。
已修改(modified):表示修改了文件,但还没保存到版本库中。
工作区域
工作区:电脑里面的目录,比如上面的 git_test
文件夹。
缓存区:存放在版本库里面。所有经过 git add
操作的文件都会到这个区域来。
版本库:隐藏目录 .git
。
上篇文章说了,提交文件到版本库是分为两步的。
第一步执行git add
把文件添加到缓存区。
第二部执行git commit
把缓存区的文件提交到版本库。
反正就是需要提交的文件修改通通放到缓存区,然后,一次性提交缓存区的所有修改到版本库。
接着上一篇文章的操作再过一遍。向hello.md
写入一些内容,并创建一个新的文件test.txt
,内容随便写就行。
$ echo "Hello Git" > hello.md
$ touch test.txt
$ echo "Hello Git Test" > test.txt
执行git 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: hello.md
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
no changes added to commit (use "git add" and/or "git commit -a")
hello.md
被修改,test.txt
从未被添加过,状态是未跟踪(untracked)。
接着把hello.md
和test.txt
都添加金缓存区,执行git status
看一下状态。
$ git add hello.md
$ git add test.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: hello.md
new file: test.txt
然后执行 git commit
把缓存区的修改提交的版本库。
$ git commit -m 'add test.txt'
2 files changed, 2 insertions(+)
create mode 100644 test.txt
$ git status
On branch master
nothing to commit, working directory clean
提交完之后,工作区是干净的,缓存区也是干净的。
这个缓存区的概念非常重要,一定要理解。
文件状态与工作区域对应关系
刚开始时工作区域是空的,没有任何文件,然后我们初始化版本库。
新创建的文件都是"未跟踪"状态,放在工作区;
执行完 ·git add
之后的文件都是“已缓存”状态,放在缓存区;
执行完git commit
之后的文件都是“已提交”状态,放在版本库中;
缓存区的文件被修改了,文件是处于“已修改”状态,放在缓存区中;
版本库中的文件被修改,跟创建新文件类似,只不过该文件不是“未跟踪”状态,而是“已修改”状态。可以重新走git add & git commit
流程。