Git——跟踪或取消跟踪文件

Git操作指南:解决跟踪文件与过滤未跟踪文件
本文详细介绍了在Git过程中遇到的问题如何解决:如何删除被跟踪但不想跟踪的文件,以及如何通过.gitignore文件过滤未被跟踪的文件。包括使用git rm命令的两种方式以及创建.gitignore文件的步骤。

在git是用过程中,可能遇到以下情况:

1、被跟踪文件里面有不想跟踪的文件。

2、每次用git status查看状态时总是列出未被跟踪的文件。

解决方法:

1、当被跟踪的文件里面有不想跟踪的文件时,使用命令git rm删除文件。如:

git rm --cached readme1.txt    删除readme1.txt的跟踪,并保留在本地。

git rm --f readme1.txt    删除readme1.txt的跟踪,并且删除本地文件。

然后git commit即可。但是git status查看状态时还是会列出来。

2、每次用git status查看状态时总是列出未被跟踪的文件,可以通过.gitignore文件达到目的。

在git init的目录下建立.gitignore文件,使用如下语法进行填写文件即可。

  • /mtk/ 过滤整个文件夹

  • *.zip 过滤所有.zip文件

  • /mtk/do.c 过滤某个具体文件

很简单吧,被过滤掉的文件就不会出现在你的GitHub库中了,当然本地库中还有,只是push的时候不会上传。

需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中:

  • !*.zip

  • !/mtk/one.txt

唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。

为什么要有两种规则呢?想象一个场景:我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理。那么我们就需要使用:

  • /mtk/

  • !/mtk/one.txt

假设我们只有过滤规则没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!

最后需要强调的一点是,如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。


Git 中,`git update-index` 是一个底层命令,用于手动更新暂存区(staging area)中文件的状态。你提到的“`git update-index 取消`”,通常是指 **取消之前通过 `git update-index` 做出的特殊设置**,比如: - 取消 `--assume-unchanged`(假设文件未改变) - 取消 `--skip-worktree`(跳过工作树检查) 这两个标志常被用来临时忽略某些文件的修改(例如配置文件),但后续需要恢复跟踪时就必须“取消”。 --- ## ✅ 常见场景:如何“取消” `git update-index` 的操作? ### 情况 1:使用了 `git update-index --assume-unchanged <file>` 你想让 Git **暂时忽略某个文件的更改**(比如本地配置文件),于是执行: ```bash git update-index --assume-unchanged path/to/file.txt ``` 之后 Git 就不再检测该文件的变化。 #### ❌ 问题:现在想恢复跟踪这个文件的修改,怎么办? ##### ✅ 解决方案:取消 assume-unchanged ```bash git update-index --no-assume-unchanged path/to/file.txt ``` 这会重新启用对该文件的变更监控。 > 🔍 提示:可以用以下命令查看当前被标记为 assume-unchanged 的文件: > > ```bash > git ls-files -v | grep '^h' > ``` > (小写 `h` 表示 `assume-unchanged`,大写表示正常) --- ### 情况 2:使用了 `git update-index --skip-worktree <file>` 这是另一种更彻底的“忽略修改”的方式: ```bash git update-index --skip-worktree path/to/file.txt ``` 与 `--assume-unchanged` 类似,但它更强调“即使上游改了也不覆盖我本地”。 #### ✅ 取消方法: ```bash git update-index --no-skip-worktree path/to/file.txt ``` > 查看被 skip-worktree 的文件: > > ```bash > git ls-files -v | grep '^S' > ``` --- ## 🧩 对比 `--assume-unchanged` vs `--skip-worktree` | 特性 | `--assume-unchanged` | `--skip-worktree` | |------|------------------------|--------------------| | 用途 | 性能优化(如编辑器临时锁) | 强制本地保留修改不被覆盖 | | 是否受远程更新影响 | 当文件在分支间切换时仍可能被覆盖 | 更强保护,不会轻易被覆盖 | | 如何取消 | `--no-assume-unchanged` | `--no-skip-worktree` | --- ## 💡 实际使用示例 假设你有一个配置文件 `config/database.php`,你不希望自己的数据库密码提交,也不想每次都被 Git 提示修改。 ### 步骤 1:告诉 Git 忽略它的修改 ```bash git update-index --assume-unchanged config/database.php ``` ### 步骤 2:后来你想恢复对该文件跟踪(比如要应用新的默认配置) ```bash git update-index --no-assume-unchanged config/database.php ``` 然后就可以正常看到它的修改状态了: ```bash git status # 会显示 database.php 是否修改 ``` --- ## ⚠️ 注意事项 - `git update-index` 不会影响其他协作者,只作用于本地仓库。 - 错误地使用这些标志可能导致“明明改了文件却无法提交”——记得定期检查是否有文件被忽略: ```bash # 查看所有被特殊处理的文件 git ls-files -v | grep '^[a-zS]' ``` --- ## ✅ 总结 | 目标 | 命令 | |------|------| | 忽略文件修改(临时) | `git update-index --assume-unchanged <file>` | | 恢复跟踪文件修改 | `git update-index --no-assume-unchanged <file>` | | 强制跳过工作树检查 | `git update-index --skip-worktree <file>` | | 取消跳过 | `git update-index --no-skip-worktree <file>` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值