Git 暂存区(Staged)Diff 查看与操作指南¶
在 Git 中,理解 工作区(Working Directory)、暂存区(Staging Area / Index) 和 提交区(Repository/HEAD) 的关系很重要。本页专注于如何查看和操作暂存区(Staged),并提供常用示例与技巧,适合直接放到 MkDocs 文档中。
1. 基本概念¶
- 工作区(Working Directory):你当前编辑的文件所在位置。
- 暂存区(Staging Area / Index):通过
git add把修改放入的区域,用来准备提交。 - 提交区(Repository / HEAD):已经保存到历史版本中的内容。
一个常见的误解是:git add 并不是直接提交,而是把修改放到暂存区;提交动作需要再执行 git commit。
2. 查看暂存区差异¶
git diff:显示 工作区 vs 暂存区 的差异(未git add的改动)。git diff --cached或git diff --staged:显示 暂存区 vs 上一次提交(HEAD) 的差异(也就是所有已git add的改动)。
3. 常用命令(可直接复制运行)¶
查看所有已 staged 的改动(批量):
查看单个文件的 staged diff:
只列出已 staged 的文件名(不显示内容):
列出已 staged 文件及状态(M=modified, A=added, D=deleted):
查看统计信息(每个文件的改动行数汇总):
把 staged 改动保存为补丁文件(便于发送/审核/应用):
4. Git 暂存区(Staged)的常用操作和命令举例¶
暂存区是 Git 使用的一个难点,因为它处于 工作区和提交区之间,操作灵活但容易混淆。下面是常见的操作和示例:
4.1 将修改加入暂存区¶
添加当前目录下的所有修改:
添加仓库中所有修改(更推荐明确路径,而非 -A):
4.2 从暂存区移除文件(但保留工作区修改)¶
此时修改仍然存在于工作区,只是从暂存区移除了。
4.3 暂存部分修改(交互式)¶
这会逐块(hunk)显示修改,你可以选择 y(加入)、n(跳过)等操作。
4.4 查看暂存区内容¶
列出已暂存文件:
4.5 从暂存区移除文件(不跟踪)¶
这会把文件从暂存区和版本库中移除,但不会删除工作区的文件。
4.6 清空暂存区(保留工作区修改)¶
这样会把暂存区的内容回退到上一次提交的状态,修改仍然保留在工作区。
4.7 暂存区与提交结合¶
提交暂存区的内容:
跳过暂存区,直接提交工作区的所有修改(不推荐长期使用):
5. 实用技巧¶
- 使用
git status随时查看哪些修改在工作区,哪些在暂存区。 - 如果提交前需要更精细的控制,推荐使用
git add -p。 - 当暂存区和工作区同时有修改时,可以用
git diff(看未暂存改动) +git diff --cached(看已暂存改动)结合分析。 - 如果不小心提交了错误内容,可以用
git reset --soft或git reset --mixed回退并重新整理暂存区。
6. 小结(速查表)¶
| 场景 | 命令 |
|---|---|
| 添加文件到暂存区 | git add file |
| 添加所有修改 | git add . |
| 移除文件出暂存区(保留工作区修改) | git reset HEAD file |
| 交互式选择修改块加入暂存区 | git add -p |
| 清空暂存区(保留工作区修改) | git reset |
| 查看工作区未暂存的改动 | git diff |
| 查看所有已 staged 的改动 | git diff --cached |
| 提交暂存区内容 | git commit -m "msg" |
7. 常见问题(FAQ)¶
Q:为什么说暂存区是 Git 使用的难点?
A:因为 Git 提交分两步:先 git add 放入暂存区,再 git commit。这给了用户高度的灵活性(可以只提交部分修改),但也容易搞混“修改是否已经准备提交”。掌握 git diff 与 git status,是理解和正确使用暂存区的关键。