【Git从入门到精通】系列课程05:深入理解git中的4种状态

在这里插入图片描述

未跟踪的文件(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命令底层到底做了什么。



每一次点赞,都是你独特的味道。每一次关注,都是我前行的动力。感谢有你,一起成长!

推荐阅读

1. 十分钟带你入门Vue.js开发(Vue 3)

2. 十分钟带你入门PostgreSQL数据库开发

3. 十分钟带你入门Go语言(Golang)开发

猜你喜欢

转载自blog.csdn.net/fuxily/article/details/139511916