4

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

我一直在做类似的事情

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

但这越来越乏味,因为我必须明确说明要删除的内容,而不是保留的内容。

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

我放弃了:整个历史的改写似乎很脆弱,把事情搞砸了。糟透了。我只是复制文件并咬住丢失历史的子弹。

4

1 回答 1

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?

于 2013-10-15T09:51:50.127 回答