要理解 Git Stash 中「保持 Index(暂存区)」的作用,首先得先理清 Git 工作区的三个核心区域:

  • 工作区:你正在编辑的文件(未 git add)
  • 暂存区(Index):已经 git add 但未 git commit 的文件
  • 版本库:已经 git commit 的文件

「保持 Index」的核心作用

「保持 Index」对应的是 Git 命令行的 git stash save --keep-index(新版 Git 是 git stash push --keep-index),它的核心作用是:
执行 stash 时,只暂存「工作区中未加入暂存区的修改」,而保留暂存区(Index)的内容不变

通俗解释 + 场景举例

假设你有以下状态:

  1. 文件 A:修改后已 git add(在暂存区)
  2. 文件 B:修改后未 git add(仅在工作区)

情况 1:不勾选「保持 Index」(默认 stash)

执行 stash 后:

  • 暂存区(A)+ 工作区(B)的修改都会被暂存到 stash 中
  • 工作区 + 暂存区都会回到上一次 commit 的干净状态
  • 此时你既看不到 A 的修改,也看不到 B 的修改

情况 2:勾选「保持 Index」(--keep-index)

执行 stash 后:

  • 只有工作区的 B 会被暂存到 stash 中
  • 暂存区的 A 会被保留(依然在暂存区,工作区也保留 A 的修改)
  • 此时你仍能看到 A 的修改(暂存区+工作区都在),但 B 的修改被暂存走了

典型使用场景

这个功能最常用在「验证暂存区代码」的场景:
比如你已经把要提交的代码 git add 到暂存区,想先跑一遍测试/代码检查,确认这部分代码没问题,但又不想提交;同时工作区还有一些未完成的、不想被测试影响的修改。
此时勾选「保持 Index」:

  1. 把工作区的未完成修改 stash 走,让工作区变干净
  2. 保留暂存区的待提交代码,你可以放心跑测试/检查
  3. 测试通过后,直接 git commit 提交暂存区代码即可
  4. 之后再用 git stash pop 恢复之前暂存的未完成修改

PhpStorm 中的对应逻辑

在 PhpStorm 的 Git Stash 弹窗中:

  • 勾选「Keep Index」→ 对应 git stash push --keep-index
  • 不勾选 → 对应默认的 git stash push(暂存所有修改:工作区+暂存区)

总结

  1. 「保持 Index」的核心是保留暂存区的修改,只暂存工作区未 add 的内容
  2. 主要用于「验证暂存区代码」的场景,避免暂存区内容被 stash 清空;
  3. 对比默认 stash:默认会清空暂存区+工作区,而「保持 Index」只清空工作区未 add 的部分。

标签: none

添加新评论