从所有提交中删除文件

Yos*_*ku3 24 git delete-file

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

VKa*_*atz 49

在这种情况下,您可以使用Git Filter Branch命令和--tree-filteroption.

语法是 git filter-branch --tree-filter <command> ...

git filter-branch --tree-filter 'rm -f Resources\Video\%font%.ttf' -- --all
Run Code Online (Sandbox Code Playgroud)

关于命令的说明:

<command>:指定任何shell命令.

--tree-filter: Git会将每个提交检查到工作目录,运行命令,然后重新提交.

--all: 过滤所有分支中的所有提交.

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

希望这能帮到你!!!

  • @Gonzalo Bnavides您可以使用以下命令`git filter-branch --tree-filter'find -iname“ * .pdf” -type f -exec rm -rf {} \; '--全部 (4认同)
  • 我不得不用双引号''`=`"`替换单个刻度.此外,该文件仍然在github之后.我需要推吗? (3认同)
  • 在Windows中必须使用'/'而不是'\' (3认同)
  • 是否可以删除某些类型的文件?像所有.pdf文件一样? (2认同)

kar*_*aze 17

git filter-branch --index-filter 'git rm --cached --ignore-unmatch Resources\Video\%font%.ttf' HEAD可以比--tree-filter因为它只更新 git 历史而不是工作目录快得多(最多 100 倍)。

参考:“git filter-branch”中的“--tree-filter”和“--index-filter”有什么区别?
参考:https : //git-scm.com/docs/git-filter-branch


gee*_*lin 11

根据官方的 git 文档,git filter-branch 强烈建议不要使用,推荐的方法是使用贡献的git-filter-repo命令。

安装它(通过包,或使用包 python3-pip,执行pip install)。

驱魔的命令filename

git filter-repo --invert-paths --path filename
Run Code Online (Sandbox Code Playgroud)

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