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

时间:2013-10-15 08:39:33

标签: git

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

我一直在做像

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

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

Git原则上应该能够确定当前文件的所有祖先,返回历史记录,并删除祖先中没有的所有内容。怎么样?

我放弃了:这整个历史的改写似乎非常脆弱并且弄乱了事情。太糟糕了。我只是复制文件并咬掉失去历史的子弹。

1 个答案:

答案 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?