开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情
文件的git获知状态
工作区就是我们编写代码的地方,在里面的所有文件无非就两个状态:已跟踪或未跟踪。
已跟踪
若是文件的状态为已跟踪,那么该文件已经被git记录;也就是被纳入了版本控制,被git所知。
这种状态的文件在上一次快照中已经有他们的记录了。
状态类别
已跟踪的文件的状态还可以被细分为3种状态:
- 未修改/已提交【unmodified/committed】:该文件已经存在于git仓库中的某个版本中,且没有修改过,就是版本中原来的文件。
- 已修改【modified】:该文件自上次提交后,经过了修改,与git仓库中存储的最新的文件内容不符。且没有被暂存。
- 已暂存【staged】:已修改且已经放在暂存区暂存的文件。
未跟踪
除了已跟踪的文件,剩下的文件都是未跟踪的。
它们既不存在于上次快照的记录中,也没有被放入暂存区。
状态变化周期
一个新建的文件开始时为未跟踪状态【Untracked】,在修改编辑后进行追踪【用git add命令进行追踪】之后,文件的状态就会变为已追踪【tracked】状态中的已暂存【Staged】。
而已暂存的文件经过提交【使用命令git commit -m "提交信息"进行提交】后,文件状态便改为未修改状态【unmodified】。
当未修改的文件进行修改后,文件状态变为已修改【modified】。
已修改的文件进行暂存后【使用命令git add暂存】,状态变为了已暂存。
而未修改的文件被移除仓库【使用git rm命令移除】后,该文件便成了未跟踪状态。
检查当前文件状态 git status
应用实例
可以用 git status 命令查看哪些文件处于什么状态。
若是文件全为未修改状态的,则显示
有未跟踪状态的文件则会被列出在
untracked files下面
若是有已暂存的文件则显示在changes to be committed下面
若是有已修改状态的文件则会显示在Changes not staged for commit下面:
简略状态
对git status使用-s选项,可以使得该命令的输出更简洁。
这样文件的状态会在文件前面给出,例如下图
第一个字母:A表示添加,M表示修改,R表示重命名,D表示删除,??表示未追踪的文件。
显示的状态可能有两位,只有一位时表示工作区中文件的状态,若是有两位,则表示文件之前就已经被暂存过了,第一位【左边的】表示上一次暂存前文件的状态,第二位表示当前文件的状态。
例如:
- M表示当前文件与原来相比,在工作区中做了修改。
- AD表示之前暂存区有该文件,但是工作区删除了该文件。
- AM表示之前暂存区有该文件,现在的工作区的该文件又做了新的修改。
- MM表示之前该文件已经在某个版本中了,而且暂存区是已经有他修改的记录了,当前工作区又进行了修改。
- MD表示原来暂存区已经有修改的记录了,之后工作区又将该文件删除了
Git的3个文件集合
Git的3个文件集合分别为:
- HEAD:主要用于存储上一次提交的快照,是下一次提交的父节点。
- Index:是即将要提交的快照
- Working Directory:主要作为沙盒来使用。
HEAD
该文件集合是当前分支所引用的指针,他总是指向该分支上的最后一次提交。可以将其看作该分支上最后一次提交的快照。
Index
其实就是Git的暂存区
Working Directory
其实就是工作区,他就像一个沙盒一样可以进行任何操作,当工作进行到一个关键节点的时候可以进行暂存、提交等操作。
句末语
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情