有一些工具,比如git filter-repo,可以从整个git历史中删除一个文件,就像它从来不存在一样。是否可以从git历史中删除一个文件,但只能在某个提交之后?假设我想保留文件的最初100个版本,但从版本101-200开始,我想从存储库中删除它。
waxmsbnn1#
正如@legec上面所建议的,使用git-filter-repo在某次提交后删除文件的语法是:
git-filter-repo --path "path/to/file" --invert-paths --refs c`3c1a385123eb3bf978de3bee99d2101ea26521a..HEAD
(用你想保留的初始提交替换c3 c1 a385123 eb 3bf 978 de 3bee 99 d2101 ea 26521 a,所以如果你想从某个文件夹中删除一个文件,你必须在那之前选择一个提交)从整个历史中删除文件的简单语法是:
git-filter-repo --replace-refs delete-no-add --path "path/to/file" --invert-paths
如果要使用通配符,请将--path替换为--path-glob
git-filter-repo --replace-refs delete-no-add --path-glob "path/to/fi*" --invert-paths
免责声明:这是一个危险的操作,它可以轻易地删除你的仓库。例如,在一次操作中忘记“--invert-paths”将删除所有内容,只保留您想要删除的文件。如果其他用户有活跃的分支等,这也会使事情复杂化。
1条答案
按热度按时间waxmsbnn1#
正如@legec上面所建议的,使用git-filter-repo在某次提交后删除文件的语法是:
(用你想保留的初始提交替换c3 c1 a385123 eb 3bf 978 de 3bee 99 d2101 ea 26521 a,所以如果你想从某个文件夹中删除一个文件,你必须在那之前选择一个提交)
从整个历史中删除文件的简单语法是:
如果要使用通配符,请将--path替换为--path-glob
免责声明:这是一个危险的操作,它可以轻易地删除你的仓库。例如,在一次操作中忘记“--invert-paths”将删除所有内容,只保留您想要删除的文件。如果其他用户有活跃的分支等,这也会使事情复杂化。