系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、skip-worktree命令
-
- [1.1 命令解释:](#1.1 命令解释:)
- [1.2 和 .gitignore 的区别:](#1.2 和 .gitignore 的区别:)
- 二、使用步骤:
-
- [2.1 git base 打开](#2.1 git base 打开)
- [2.2 恢复追踪](#2.2 恢复追踪)
- [2.3 目录包含和排除](#2.3 目录包含和排除)
- 总结
前言
在git 中 某些文件(如配置文件) 已提交至仓库,但是本地开发需要取修改某些文件,修改完成时不想被git 记录到(因为只在本地使用),不提交至git 仓库中,那么是否有一种方式可以临时跳过这些文件呢?
一、skip-worktree命令
1.1 命令解释:
git update-index --skip-worktree 文件 ,可以让 Git 假装看不见这个文件的本地修改 → 本地随便改,永远不会被 commit /push 提交,但文件本身还在仓库里!
bash
git update-index --skip-worktree 文件
它给文件 打了一个本地标记,告诉 Git: 我本地会修改这个文件,但这些修改只属于我自己,不要提交到 Git 仓库。效果:
- 本地修改 → git status 看不见
- git add . → 不会加入暂存
- git commit → 不会被提交
- git push → 不会推送到远程
- 文件依然保留在仓库里,其他人不受影响
适合你的场景:
- 文件 a 已经在仓库里
- 本地需要修改(启动项目用)
- 不想提交到 Git
- 未来仓库更新时,还能正常拉取、合并、提交
1.2 和 .gitignore 的区别:
| 方式 | 作用 | 是否还在仓库 | 已提交文件是否生效 |
|---|---|---|---|
| .gitignore | 忽略新文件 | 不在 | 不生效 |
| git update-index --skip-worktree | 忽略已存在文件的本地修改 | 在 | 100% 生效 |
二、使用步骤:
2.1 git base 打开
在项目根目录右键-》 Open Gig Bash here -》 输入命令
c
find . -name "*.yml" -not -path "*/target/*" -exec git update-index --skip-worktree {} \;
结果此时 yml 文件不会被追踪到:

2.2 恢复追踪
执行以下命令
c
find . -name "*.yml" -not -path "*/target/*" -exec git update-index --no-skip-worktree {} \;
2.3 目录包含和排除
bash
find . -path "*/包含目录/*" -name "*.yml" -not -path "*/排除目录1/*" -not -path "*/排除目录2/*" -exec git update-index --skip-worktree {} \;
总结
git update-index --no-skip-worktree 可以让git 不追踪 已经被提交至git 仓库,但是本地又有修改的文件。