如何使用正则表达式将git筛选器分支从历史记录中永久删除文件/目录?

如何使用正则表达式将git筛选器分支从历史记录中永久删除文件/目录?,git,version-control,git-filter-branch,Git,Version Control,Git Filter Branch,有没有办法通过git filter branch传递正则表达式从历史记录中永久删除文件/目录?假设您想进行索引筛选(无需更改工作树),您可以在所有提交上编写脚本,只需通过sed更改所需的文件,在git ls文件的输出上执行egrep或grep操作 git ls-files --cached | \ sed 's/weirdprefix\(pattern\)/git reset HEAD weirdprefix\1/g' | \ xargs -i{} sh -c '{}' (这是您将在filt

有没有办法通过git filter branch传递正则表达式从历史记录中永久删除文件/目录?

假设您想进行索引筛选(无需更改工作树),您可以在所有提交上编写脚本,只需通过sed更改所需的文件,在
git ls文件的输出上执行egrep或grep操作

git ls-files --cached | \
sed 's/weirdprefix\(pattern\)/git reset HEAD weirdprefix\1/g' | \ 
xargs -i{} sh -c '{}'
(这是您将在filter branch命令中提供的脚本)

以下是文档()中的一个示例:


哎呀,是我的错,我忘了提a想从历史记录中删除文件/目录。将编辑我的问题。
reset HEAD
index filter不是不可操作的吗?您是否必须使用
rm--cached
?不应该是
sed-n'../gp'
?否则,它将打印未修改的行,这些行大部分是无效命令,但如果某个文件碰巧是可执行的…是。。你们都是对的。。我是在没有测试的情况下做这件事的:(我会在有时间的时候更新答案。)谢谢你的建议!对不起,我对命令行不是很熟悉,我如何将它提供给filter branch命令?什么是“古怪前缀”?
git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
                GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
                        git update-index --index-info &&
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD