git从存储库中删除文件,但将其保留在文件系统中

时间:2011-09-29 19:00:11

标签: git

我尝试从git存储库中删除不必要的文件。最初添加了这些文件,现在它们位于多个分支中。我想要的只是停止跟踪文件中的更改,我不关心应该保留哪些更改,但我需要将这些文件留在文件系统上。

我试过了

git filter-branch --index-filter "git rm --cached --ignore-unmatch file_to_remove" HEAD

但是从文件系统中删除了不需要的文件。

4 个答案:

答案 0 :(得分:36)

只需:

git rm --cached file [file ...]

当然,您需要确保将违规文件添加到.gitignore,以免他们立即重新发送

答案 1 :(得分:2)

如果要将文件保留在存储库中,可以使用:
git update-index --assume-unchanged <fileName>

这会将文件的当前版本保留在索引中,但您可以随意更改它,git将忽略这些更改。

答案 2 :(得分:0)

使用git rm --cached命令很危险,因为它仍然作为“删除”被推送到远程存储库进行处理。所以当你(或其他人)拉  从存储库的另一个实例中,它将删除您要忽略的文件!

GitHub here记录了迫使git忘记文件的正确方法。

我建议阅读文档,但基本上是:

git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all
git push origin --force --all
git push origin --force --tags
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now

只需用文件的完整路径替换full/path/to/file。确保已将文件添加到.gitignore

由于您要更改自己的git历史记录,因此您还需要(临时)allow non-fast-forward pushes to your repository

答案 3 :(得分:-3)

结帐并为每个分支运行 git clean

  

git-clean - 从工作树中删除未跟踪的文件

     

通过从当前目录开始递归删除不受版本控制的文件来清理工作树。

https://git-scm.com/docs/git-clean