分步拆解全过程,一目了然
前提概念
- 工作区:电脑文件夹里实实在在的文件(你打开编辑的文件)
- 暂存区(stage/index) :
git add提交进去的快照,等待被 commit 固化成提交记录 - 本地仓库 :
git commit之后永久保存的版本
举个实操例子
步骤1:新建/修改文件 a.txt,写入内容:111
文件在工作区改动,暂存区无变化
步骤2:执行 git add a.txt
✅ 暂存区存入:a.txt = 111
此时:
- 暂存区:保存111版本
- 工作区:依旧是111,二者内容一致
步骤3:不commit,继续修改 a.txt,改成:222
现在状态拆分:
- 工作区:最新内容 222
- 暂存区 :依然保留上一次add的旧内容 111(不会自动更新)
两个地方内容不一样
步骤4:再次执行 git add a.txt
本次add会用工作区最新内容,覆盖暂存区里该文件的旧快照
最终状态:
- 暂存区:
a.txt = 222 - 工作区:
a.txt = 222
两边又保持一致
核心结论
- 多次对同一个文件执行
git add:后一次add会覆盖暂存区内该文件之前的版本,暂存区永远只留存该文件最后一次add时的内容; - 只要没 git commit,暂存区内容随时可以被新的 add 覆盖、清空;
- 暂存区不会自动跟随工作区改动,必须手动add才会更新。
常用查看命令
bash
# 查看工作区和暂存区差异
git diff
# 查看暂存区和上次commit的差异
git diff --cached
延伸场景
如果你先后修改了两个不同文件:
改文件1 → add;改文件2 → add
暂存区会同时包含文件1+文件2两个文件的最新快照,互不覆盖。