从git存储库中完全删除文件沿着历史记录

b91juud3  于 2023-05-05  发布在  Git
关注(0)|答案(3)|浏览(165)

我上传了一个字体文件,我没有权利分发到git hub几个更新前。
我有一个相对不活跃的存储库,如果有必要,我有能力通知我的所有成员。我试过几种解决办法。我需要删除目录中一个名为Resources\Video\%font%.ttf的文件,其中%font%是该字体的普通、斜体和粗体版本的名称。我使用什么命令?

vfh0ocws

vfh0ocws1#

在这种情况下,您可以使用Git Filter Branch命令和--tree-filter选项。
语法为git filter-branch --tree-filter <command> ...

git filter-branch --tree-filter 'rm -f Resources\Video\%font%.ttf' -- --all

编辑更新

请注意,git filter-branch--index-filter--tree-filter快得多

git filter-branch --index-filter 'rm -f Resources\Video\%font%.ttf' -- --all

在Windows中必须使用/而不是\

  • 命令说明:*

< command >指定任何shell命令。
--tree-filter: Git会将每个提交都检查到工作目录,运行你的命令,然后重新提交。
--index-filter: Git更新git历史记录,而不是工作目录。
--all:过滤所有分支中的所有提交。

**注意:**请检查您的文件路径,因为我不确定文件路径

希望这对你有帮助。

yacmzcpb

yacmzcpb2#

根据官方的git文档,强烈建议不要使用git filter-branch,建议使用git-filter-repo命令。
Install it(通过包,或使用包python3-pip,执行pip installpip install git-filter-repo)。
清除filename的命令是:

git filter-repo --invert-paths --path filename

--invert-paths选项表示排除,不包括以下路径。

8tntrjer

8tntrjer3#

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Resources\Video\%font%.ttf' HEAD可以比--tree-filter快很多(最多100倍),因为它只更新git历史,而不是工作目录。
参考:What is the difference between "--tree-filter" and "--index-filter" in the "git filter-branch"?
参考:https://git-scm.com/docs/git-filter-branch

相关问题