文件状态
下面以新增 README.md 文件为例
Untracked
未被 Git 跟踪的文件状态
- 新创建
- 从其他地方移动过来(复制 / 剪切等)
Staged
使用 git add <file>
命令将文件加入暂存区,转化为 Staged
状态
使用 git rm --cached <file>
可以将文件移出缓存区,重新变为 Untracked
状态
文件当前内容
1 | 123 |
Modified
对 Staged
已经存入暂存区的文件进行修改,转化为 Modified
状态
文件修改后
1 | 123 |
可以看到和 Untracked
状态一样,被 Git 标红了
意味着此时暂存区内该文件的内容还是 123
,需要重新使用 git add <file>
命令将本次修改保存到 Git 中(更新 Git 的 diff 内容)。
后续命令
git restore <file>
,丢弃本次修改,恢复到当前暂存区存取的内容(最后一次被修改之前的状态)git checkout <file>
等价于 restore
文件 restore 后
1 | 123 |
应用场景
操作涉及 工作区 和 暂存区 两个区域。
当工作到某个重要节点,你需要在这个节点上进行扩展,但是你又不确定这个扩展是否可行
这时候就可以 “stage” 这个节点,然后继续修改,如果不可行就通过 git restore <file>
回到这个节点,丢弃掉所有修改内容。
当然如果这个节点是重要且确定的,你可以直接
git add <file>
=>git commit
将其提交到本次仓库中
提问
- 如果我 “stage” 了这次新的修改,原先的节点还能找到吗 :x:
UnModified
将 Staged
状态的文件(暂存区的文件)通过 git commit
提交到本次仓库中,转化为 Unmodified
状态。
为了后续追踪文件内容,添加了一行 commit 标志
1 | 123 |
commit 提交后,该文件就加入本地仓库了,并输出了本次 commit 的 branch(master)和 refs(9db5ee9)。
接下来继续对文件进行修改(工作区)、保存(暂存区)、提交(本地仓库),完成一整个流程。
1 | 123 |
状态流程
新加入的文件
1 | // 首次加入 |
已追踪的文件
1 | // 追踪更改 |
注意:未被追踪的文件,无论怎么修改都不会被 Git 管理为 Modified 文件