未跟踪的文件(Untracked files)
当我们在工作区中新增一个文件时,它的状态处于未跟踪的状态,如下所示:
jagitch@4d7a018f5ea9:git-demo$ git status
On branch master
nothing to commit, working tree clean
jagitch@4d7a018f5ea9:git-demo$ touch store.js
jagitch@4d7a018f5ea9:git-demo$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
store.js
nothing added to commit but untracked files present (use "git add" to track)
第一个
git status
查看工作区(working tree)的状态时,显示工作区是干净的;然后我们新增一个文件,再次查看工作区的状态,出现了一个未跟踪的store.js文件
已暂存(Staged)
当我们将工作区修改的内容添加到暂存区后,文件的状态就变成已暂存,已暂存的文件已暂存的文件是可以被提交的文件,列在Changes to be committed下面,如下所示:
jagitch@4d7a018f5ea9:git-demo$ git add .
jagitch@4d7a018f5ea9:git-demo$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: store.js
已提交(Commited)
我们可以将暂存区中的内容提交到仓库中保存,会将暂存区中的所有内容进行散列计算处一个Commit ID,在仓库中唯一标识这一次提交。当我们把暂存区中的内容提交到仓库中后,工作区又会变成干净的。如下所示:
jagitch@4d7a018f5ea9:git-demo$ git commit -m "add store.js file"
[master 8e670f1] add store.js file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 store.js
jagitch@4d7a018f5ea9:git-demo$ git status
On branch master
nothing to commit, working tree clean
已修改(Modified)
当我们在工作区修改状态是已暂存或已提交的文件时,这个修改理解成变化应该更准确,因为删除也算文件被修改了,此时工作区这个文件就是已修改的状态,已修改的文件列在Changes not staged for commit下面,如下所示:
jagitch@4d7a018f5ea9:git-demo$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: hello.js
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: hello.js
deleted: store.js
总结
Git进行版本控制与集中式的版本控制系统不同,后者是基于文件的差异进行管理的,每次提交只记录了文件出现了哪些变化,而Git保存的是文件的快照。当我们把工作区的文件添加到暂存区时,是把工作区的文件拷贝一份到暂存区,当把暂存区中的文件提交到仓库时,也是把暂存区中的文件拷贝一份。所以它很容易从暂存区和仓库中恢复文件。因此了解文件在工作区、暂存区、仓库中的状态,我们才能掌握git的数据流向,才能懂得每条git命令底层到底做了什么。
每一次点赞,都是你独特的味道。每一次关注,都是我前行的动力。感谢有你,一起成长!