Command Reference

git-update-index 教程

解释如何用 git-update-index 直接修改索引中的条目和属性。

适合谁看
  • 已经会基本提交和分支操作的开发者
  • 想理解命令边界与风险的人
前置知识
  • 知道工作区、暂存区、提交的基本关系
  • 能读懂 `git status` 和简单历史图
常见风险
  • 误把本地整理命令用到共享历史
  • 在没确认恢复路径前直接继续改写历史

一句话理解

git-update-index 用于直接修改索引中的条目和属性。

什么时候适合用

  • 当你需要直接修改索引中的条目和属性
  • 当你想把这类操作做成稳定流程而不是手工重复
  • 当你需要更准确地理解 Git 在这一步到底记录了什么

基本示例

git update-index --assume-unchanged path/to/file

读这条命令时最该注意什么

底层命令更接近实现细节,读写前要先确认自己是不是只需要一个更安全的高层命令。

一个更稳的实践建议

先把它当作只读检查工具理解,再决定是否进入修改引用或索引的用法。

补充理解角度

  • 理解底层对象和引用
  • 写脚本或排查高级问题
  • 验证 Git 内部状态

这条命令在流程里解决什么问题

git update-index 解决的是"需要直接修改索引中的条目和属性"的问题。它是一个底层写命令,允许直接操作索引中的文件条目,设置 assume-unchanged、skip-worktree 等标记,或手动添加/删除索引条目。

典型用例

  • 标记某个文件为"假设未修改",用 git update-index --assume-unchanged path/to/file 让 Git 忽略本地对该文件的修改(如本地配置文件)。
  • 在底层脚本中手动构建索引,用 git update-index --add --cacheinfo 直接向索引添加条目。
  • 设置 skip-worktree 标记,用 git update-index --skip-worktree 让 Git 在检出时不覆盖本地文件。

图例理解

直接修改索引条目update-index 是一个底层写命令,直接操作索引中的文件条目和属性标记。它会改变索引状态,需要谨慎使用。
索引操作
文件路径条目属性(assume-unchanged/skip-worktree)cacheinfo 数据
结果
更新后的索引属性标记变更新增/删除的索引条目
update-index 直接写入索引,是写操作而非只读查询。操作前建议先了解索引的当前状态。

特殊情况与边界

  • git update-index 是写操作,直接修改索引内容。执行后索引状态会被改变,可能影响后续的 commit 和 checkout 行为。
  • --assume-unchanged 只是告诉 Git "假设这个文件没变",如果文件实际被修改了,Git 可能不会检测到,导致潜在问题。
  • --skip-worktree--assume-unchanged 不同:前者表示"我不想让 Git 碰这个文件",适合本地配置文件;后者表示"这个文件很大,我不想检查它是否变化"。
  • 手动用 --cacheinfo 添加条目时,需要正确指定模式(mode)、blob hash 和路径,错误的数据会导致索引损坏。
  • 操作索引前建议先用 git ls-files --stage 查看当前索引状态,确认目标条目的现有属性。

延伸阅读

继续搭配 git status、git log、git show 一起看,通常更容易判断这条命令对历史、索引和工作区分别造成了什么影响。