git - 如何删除除当前文件之外的任何内容的 Git 历史记录

标签 git

除了当前存在于 HEAD(我的主分支)上的文件之外,如何删除任何分支上的任何内容的完整历史记录?

我一直在做类似的事情

 git filter-branch -f --prune-empty --index-filter \
    "git rm -rf --cached --ignore-unmatch '*.js' '*.html' '*.css'" \
        HEAD

但这变得很乏味,因为我必须明确说明要删除什么,而不是保留什么。

Git 原则上应该能够确定当前文件的所有祖先,回溯历史,并删除所有不在祖先中的东西。怎么办?

我放弃了:整个历史重写似乎非常脆弱,而且把事情搞砸了。这很糟糕。我只是复制文件并硬着头皮失去历史。

最佳答案

为什么不先删除所有文件,然后添加您想要的文件呢?沿着这些线的东西:

git ls-files HEAD > /tmp/files
git filter-branch ... --index-filter \
  "git rm *; xargs -a /tmp/files git add" --all

此外,如果要过滤所有分支 (--all),为什么要在 filter-branch 命令中使用 HEAD?

关于git - 如何删除除当前文件之外的任何内容的 Git 历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19376694/

相关文章:

git - 如何还原提交并从这些更改创建新分支?

git - SourceTree - rebase - merge 期间的错误

xml - CentOS Epel 错误

git - 为 GitLab CI 禁用 GIT LFS

git - 将 git 文件历史记录保存为多个文件

git - 如何从 `git status` 报告中省略某些文件?

git - 如何贡献给别人的存储库?

git - 如何将 git 分支标记为已 merge ?

git:显示两次提交之间更改的所有文件

git - 在编写所有代码(git)之后将代码提交到特定分支?