我尝试从git存储库中删除不必要的文件。最初添加了这些文件,现在它们位于多个分支中。我想要的只是停止跟踪文件中的更改,我不关心应该保留哪些更改,但我需要将这些文件留在文件系统上。
我试过了
git filter-branch --index-filter "git rm --cached --ignore-unmatch file_to_remove" HEAD
但是从文件系统中删除了不需要的文件。
答案 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 - 从工作树中删除未跟踪的文件
通过从当前目录开始递归删除不受版本控制的文件来清理工作树。