如何删除任何分支上的任何内容的完整历史记录,但HEAD(我的主分支)上当前存在的文件?
我一直在做像
这样的事情 git filter-branch -f --prune-empty --index-filter \
"git rm -rf --cached --ignore-unmatch '*.js' '*.html' '*.css'" \
HEAD
但这变得乏味,因为我必须明确删除什么,而不是保留什么。
Git原则上应该能够确定当前文件的所有祖先,返回历史记录,并删除祖先中没有的所有内容。怎么样?
我放弃了:这整个历史的改写似乎非常脆弱并且弄乱了事情。太糟糕了。我只是复制文件并咬掉失去历史的子弹。
答案 0 :(得分:1)
为什么不首先删除所有文件,然后添加你想要的文件?这些方面的东西:
git ls-files HEAD > /tmp/files
git filter-branch ... --index-filter \
"git rm *; xargs -a /tmp/files git add" --all
另外,如果要过滤所有分支(--all),为什么在filter-branch命令中使用HEAD?