第三篇 git文件的状态与Git的文件集合

324 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情

文件的git获知状态

工作区就是我们编写代码的地方,在里面的所有文件无非就两个状态:已跟踪或未跟踪。

已跟踪

若是文件的状态为已跟踪,那么该文件已经被git记录;也就是被纳入了版本控制,被git所知。

这种状态的文件在上一次快照中已经有他们的记录了。

状态类别

已跟踪的文件的状态还可以被细分为3种状态:

  • 未修改/已提交【unmodified/committed】:该文件已经存在于git仓库中的某个版本中,且没有修改过,就是版本中原来的文件。
  • 已修改【modified】:该文件自上次提交后,经过了修改,与git仓库中存储的最新的文件内容不符。且没有被暂存。
  • 已暂存【staged】:已修改且已经放在暂存区暂存的文件。

未跟踪

除了已跟踪的文件,剩下的文件都是未跟踪的。

它们既不存在于上次快照的记录中,也没有被放入暂存区。

状态变化周期

image.png

一个新建的文件开始时为未跟踪状态【Untracked】,在修改编辑后进行追踪【用git add命令进行追踪】之后,文件的状态就会变为已追踪【tracked】状态中的已暂存【Staged】。

而已暂存的文件经过提交【使用命令git commit -m "提交信息"进行提交】后,文件状态便改为未修改状态【unmodified】。

当未修改的文件进行修改后,文件状态变为已修改【modified】。

已修改的文件进行暂存后【使用命令git add暂存】,状态变为了已暂存。

而未修改的文件被移除仓库【使用git rm命令移除】后,该文件便成了未跟踪状态。

检查当前文件状态 git status

应用实例

可以用 git status 命令查看哪些文件处于什么状态。

若是文件全为未修改状态的,则显示

image.png 有未跟踪状态的文件则会被列出在untracked files下面

image.png

若是有已暂存的文件则显示在changes to be committed下面

image.png

若是有已修改状态的文件则会显示在Changes not staged for commit下面:

image.png

简略状态

git status使用-s选项,可以使得该命令的输出更简洁。

这样文件的状态会在文件前面给出,例如下图

image.png

第一个字母:A表示添加,M表示修改,R表示重命名,D表示删除,??表示未追踪的文件。

显示的状态可能有两位,只有一位时表示工作区中文件的状态,若是有两位,则表示文件之前就已经被暂存过了,第一位【左边的】表示上一次暂存前文件的状态,第二位表示当前文件的状态。

例如:

  • M表示当前文件与原来相比,在工作区中做了修改。
  • AD表示之前暂存区有该文件,但是工作区删除了该文件。
  • AM表示之前暂存区有该文件,现在的工作区的该文件又做了新的修改。
  • MM表示之前该文件已经在某个版本中了,而且暂存区是已经有他修改的记录了,当前工作区又进行了修改。
  • MD表示原来暂存区已经有修改的记录了,之后工作区又将该文件删除了

Git的3个文件集合

Git的3个文件集合分别为:

  • HEAD:主要用于存储上一次提交的快照,是下一次提交的父节点。
  • Index:是即将要提交的快照
  • Working Directory:主要作为沙盒来使用。

HEAD

该文件集合是当前分支所引用的指针,他总是指向该分支上的最后一次提交。可以将其看作该分支上最后一次提交的快照。

Index

其实就是Git的暂存区

Working Directory

其实就是工作区,他就像一个沙盒一样可以进行任何操作,当工作进行到一个关键节点的时候可以进行暂存、提交等操作。

句末语

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情