Git原理(2)——Git状态
三个工作区域:Git仓库、工作目录以及暂存区域
工作区域 | 作用 |
---|---|
Git 仓库(Repository) | 1.保存项目的元数据和对象数据库的地方 2.从其它计算机克隆 |
仓库时,拷贝的就是这里的数据 | |
工作目录(Working Directory) | 1. 对项目某个版本独立提取出的内容 2.提取出来后在磁盘上供使用或修改 |
暂存区(Staging Area一个文件) | 保存了下次将提交的文件列表信息 |
flowchart [LR] A[工作目录(修改并暂存文件)] --快照--> B[暂存区] B --提交更新--> C[Git仓库(永久存入提交的快照)]
状态
区域相关的三个状态:已提交、已修改和已暂存
状态 | 说明 |
---|---|
已提交(committed) | 数据已经安全的保存在本地数据库中 |
已修改(modified) | 修改了文件,但还没保存到数据库中 |
已暂存(staged) | 对已修改文件的当前版本做了标记,使之包含在下次提交的快照中 |
文件状态
跟踪(git add,添加内容到下一次提交)
- 工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪
- 已跟踪:已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录
- 未跟踪:除已跟踪文件以外的所有其它文件都属于未跟踪文件
- 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态
- 新建文件出现在 Untracked files 下面。未跟踪的文件意味着 Git在之前的快照(提交)中没有这些文件;Git 不会自动将之纳入跟踪范围
- git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件
- 还能用于合并时把有冲突的文件标记为已解决状态
状态变化周期
Untracked–add–>Staged–remove–>Untracked
Umodified–edit–>Modified
Modified–>stage–>Staged–commit–>Unmodifiled
提交
提交时记录的是放在暂存区域的快照。任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
移除(git rm,从暂存区域移除并从工作目录中删除指定的文件)
- rm FILENAME,该命令仅简单地从工作目录中手工删除文件,但仍会保留在暂存区
- 此时再执行git rm,下一次提交时,该文件就不再纳入版本管理了
- 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复
- 从暂存区域移除,但仍然希望保留在当前工作目录中:git rm --cached
- 后面可接glob模式
移动(git mv 源文件 目标文件)
- Git 并不显式跟踪文件移动操作。如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。不过 Git 非常聪明,它会推断出究竟发生了什么
- 相当于执行了mv、git rm 、git add
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kaiyu's blog!
评论