除了当前存在于 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/