git - 如何使用正则表达式 git filter-branch 来从历史记录中永久删除文件/目录?

标签 git version-control git-filter-branch

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

最佳答案

假设您想要执行索引过滤器(不需要更改您的工作树),您可以在所有提交上编写脚本,并且仅在 的输出上通过 sed、egrep 或 grep 更改您需要的文件git ls-files.

git ls-files --cached | \
sed 's/weirdprefix\(pattern\)/git reset HEAD weirdprefix\1/g' | \ 
xargs -i{} sh -c '{}'

(这是您在 filter-branch 命令中提供的脚本)

以下是文档中的示例 ( http://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html ):

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

关于git - 如何使用正则表达式 git filter-branch 来从历史记录中永久删除文件/目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12607643/

相关文章:

git - 如何使用 'git filter-branch' 更新子模块的 SHA?

git - git filter-branch --tree-filter与--since返回“找不到要重写的内容”

git - 重写 Git 历史 : How do I remove a sign-off?

git - 使用 git merge --squash 和 git gc 清除未使用的 blob?

Git:以下未跟踪的工作树文件将被 merge 覆盖:upload/.DS_Store

带有神器的 Git

java - 如何在 Eclipse 中的源文件夹之间递归移动包并更新 CVS?

git - 在这些场景下使用 git cherry-pick 是否合适?

c++ - 构建 Qt 应用程序时如何运行 git 命令

git fatal error : Unsupported SSL backend 'schannel'