最终状态结论
暂存区里同时存放:
文件1(第一次修改后的完整快照) + 文件2(第二次修改后的完整快照)
分步拆解全过程
- 初始:工作区、暂存区、最新提交版本完全一致
- 修改文件1内容
仅工作区变动,暂存区无变化 - 执行
git add .
扫描所有改动文件,将文件1当前快照存入暂存区
此刻暂存区:存有文件1新版本 - 接着修改文件2内容
文件2只在工作区改动;暂存区依旧保留着文件1的快照,不受本次修改影响 - 再次执行
git add .
遍历项目所有变更文件,发现文件2有改动,把文件2最新快照追加存入暂存区文件1内容全程没再改动,本次add不会触碰、覆盖暂存区里的文件1
整体三块区域对比
- HEAD(上次提交):文件1、文件2都是旧原版
- 暂存区:文件1(v1)、文件2(v2)两个修改后的文件都在内,等待commit提交
- 工作区:和暂存区内容一模一样
关键要点
git add .只会同步当前有变动的文件到暂存区,已经存入暂存区且后续未修改的文件,会完好保留;- 多次add不同文件,暂存区是累积存放所有被暂存的文件快照,不会清空;
- 只有执行
git commit之后,暂存区才会整体清空; - 若中途回头修改文件1,再执行一次
git add .,才会用新内容覆盖暂存区里文件1旧快照。
查看验证命令
# 查看所有已暂存、待提交的内容差异
git diff --cached
# 查看暂存区文件清单
git ls-files


被折叠的 条评论
为什么被折叠?



