协慌网

登录 贡献 社区

如何让 Git“忘记” 一个被跟踪但现在位于. gitignore 的文件?

git正在跟踪一个文件,但现在该文件位于.gitignore列表中。

但是,该文件在编辑后会一直显示为git status 。你怎么强迫git完全忘掉它?

答案

.gitignore将阻止未跟踪文件被添加(没有add -f )到 git 跟踪的文件集,但是 git 将继续跟踪已经被跟踪的任何文件。

要停止跟踪文件,您需要将其从索引中删除。这可以通过此命令实现。

git rm --cached <file>

从头修订中删除文件将在下次提交时发生。

警告:虽然这不会从本地删除物理文件,但它会在下一个git pull删除其他开发人员计算机上的文件。

下面的一系列命令将从 Git 索引中删除所有项目(而不是从工作目录或本地存储库中删除),然后更新 Git 索引,同时遵守 git 忽略。 PS。 Index = 缓存

第一:

git rm -r --cached . 
git add .

然后:

git commit -am "Remove ignored files"

git update-index为我做的工作:

git update-index --assume-unchanged <file>

注意:此解决方案实际上独立于.gitignore因为 gitignore 仅适用于未跟踪的文件。

编辑:由于此答案已过帐,因此创建了一个新选项,应该首选。您应该使用--skip-worktree ,它用于用户不想再提交的已修改跟踪文件,并保持--assume-unchanged性能,以防止 git 检查大型跟踪文件的状态。有关详细信息,请参阅https://stackoverflow.com/a/13631525/717372

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

.gitignore将阻止未跟踪文件被添加(没有add -f )到 git 跟踪的文件集,但是 git 将继续跟踪已经被跟踪的任何文件。

要停止跟踪文件,您需要将其从索引中删除。这可以通过此命令实现。

git rm --cached <file>

从头修订中删除文件将在下次提交时发生。

警告:虽然这不会从本地删除物理文件,但它会在下一个git pull删除其他开发人员计算机上的文件。

下面的一系列命令将从 Git 索引中删除所有项目(而不是从工作目录或本地存储库中删除),然后更新 Git 索引,同时遵守 git 忽略。 PS。 Index = 缓存

第一:

git rm -r --cached . 
git add .

然后:

git commit -am "Remove ignored files"

git update-index为我做的工作:

git update-index --assume-unchanged <file>

注意:此解决方案实际上独立于.gitignore因为 gitignore 仅适用于未跟踪的文件。

编辑:由于此答案已过帐,因此创建了一个新选项,应该首选。您应该使用--skip-worktree ,它用于用户不想再提交的已修改跟踪文件,并保持--assume-unchanged性能,以防止 git 检查大型跟踪文件的状态。有关详细信息,请参阅https://stackoverflow.com/a/13631525/717372

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