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-unchangedskip-worktree,你仍然可以强制提交它。如果执行 git add --force 文件名,该文件仍会被暂存。因此,这只是一种本地工作区优化,不是安全锁。

批量操作与团队管理

批量标记多个文件

可以将文件列表写入一个文本文件,然后用脚本循环处理,或者使用如下技巧:

# 将项目中的所有 .env 文件标记为 skip-worktree(确保路径正确)
git ls-files '*.env' | while read file; do
  git update-index --skip-worktree "$file"
done