小编rip*_*per的帖子

带索引过滤器的Git filter-branch不起作用,并按预期删除目录

主分支中Git repo foo的结构

foo/refs/a.txt  
foo/bar/refs/b.txt  
Run Code Online (Sandbox Code Playgroud)

在其他分支refs/可能在许多其他地方

目标

从Git(历史)环境中删除目录引用的所有实例(及其内容):使用Git Bash的Windows 7

删除引用(Git没有涉及,尝试这只是为了看它自己工作)

find . -name refs -depth -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

成功,所有refs/和他们的内容被删除(如果我不使用-depth,find会报告一个错误,即dirs不存在,即使它们被正确删除).

从Git中删除引用

git filter-branch --index-filter \
'find . -name refs -depth -exec git rm -rf --cached --ignore-unmatch {} \;' \
--prune-empty --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)

通过重写Git历史记录从Git中删除目录引用

如可以在图片中可以看出(想temp/a为temp/foo)命令贯穿并重写所有提交,但没有refs/被取出,让不知何故发现的输出没有恢复到filter-branch --index-filter预期.

类似的事情似乎对其他人有用.
我错过了什么?

PS.是的,我已经阅读了数百个关于此的数小时的帖子,文章等,但它对我来说无效.

git git-filter-branch git-rewrite-history

6
推荐指数
1
解决办法
6170
查看次数