×

git 中 assume-unchanged与skip-worktree的区别

Falcon 2025-09-10 views:
自动摘要

正在生成中……

你总结的完全正确 👍

我帮你把逻辑梳理一下,方便以后查阅:


git update-index --skip-worktree <file>

  • 作用:告诉 Git “这个文件的本地修改可以忽略,不要出现在 git status 中”

  • 特点:

    • 本地改了内容不会显示为修改,也不会被提交。
    • 如果远程有人修改了这个文件并推送,你在拉取时仍会遇到冲突,因为 Git 需要合并内容。
    • 常用于:某些配置文件在本地需要个性化修改,但又不想污染版本库。

查看哪些文件被标记了

git ls-files -v | grep '^S'
  • S 开头表示 skip-worktree 标记。

  • 其他标记:

    • H → assume-unchanged
    • M → 已修改(tracked)

撤销 skip-worktree

git update-index --no-skip-worktree <file>
  • 恢复文件的正常跟踪状态,本地修改会再次出现在 git status

补充说明:和 assume-unchanged 的区别

  • skip-worktree:常用于 大项目中个性化配置文件,比如 .env,因为它更语义化,表示“这是工作区专用的改动”。
  • assume-unchanged:性能优化用,告诉 Git “这个文件不会变,不用每次都检查”,但如果本地修改了,还是可能带来意料之外的情况。
本文收录于