Git 系列之「文件状态」

2018-03-27  本文已影响9人  豆豆先生的小屋

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.mdtest.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流程。

上一篇下一篇

猜你喜欢

热点阅读