Git 忽略已经跟踪的文件变更但不删除
FreeGuideOnline
最新
2026-07-05
bash git update-index --skip-worktree config/database.yml
执行后,该文件的修改将不再出现在 `git status` 中,`git diff` 也看不到变化。
### 步骤 2:验证文件是否已被标记
使用以下命令查看所有被标记为 `skip-worktree` 的文件:
```bash
git ls-files -v | grep '^S'
输出示例:
S config/database.yml
前面的 S 表示该文件已被打上 skip-worktree 标记。
步骤 3:恢复跟踪(取消忽略)
当你需要重新让 Git 检测该文件的修改时(例如,准备提交对上游的配置更新),执行:
git update-index --no-skip-worktree config/database.yml
再次运行 git status,之前隐藏的修改就会重新显示出来。
使用 --assume-unchanged(备选方案)
虽然不优先推荐,但理解其用法有助于在一些遗留脚本或特殊场景下工作。
标记文件
git update-index --assume-unchanged app/generated/large_sdk.h
查看被标记的文件
git ls-files -v | grep '^h'
标记前显示的字母为 h(表示 assume-unchanged)。
取消标记
git update-index --no-assume-unchanged app/generated/large_sdk.h
⚠️ 重要提示:即使文件被标记为
assume-unchanged或skip-worktree,你仍然可以强制提交它。如果执行git add --force 文件名,该文件仍会被暂存。因此,这只是一种本地工作区优化,不是安全锁。
批量操作与团队管理
批量标记多个文件
可以将文件列表写入一个文本文件,然后用脚本循环处理,或者使用如下技巧:
# 将项目中的所有 .env 文件标记为 skip-worktree(确保路径正确)
git ls-files '*.env' | while read file; do
git update-index --skip-worktree "$file"
done