Git - 使用filter-branch删除带有空变更集的提交

Pau*_*ijs 75 git git-filter-branch

如何使用git filter-branch删除没有变更集的提交?

我使用以下方法重写了我的git历史:

git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD
Run Code Online (Sandbox Code Playgroud)

这很好,但现在我有很多提交空变更集.我想删除这些提交.最好是在msysgit中.

重新定位不是一个真正的选择,因为我有超过4000次提交,其中一半必须删除.

Cas*_*bel 70

只需添加--prune-empty选项:

git filter-branch --tree-filter 'rm -rf my_folder' --prune-empty -f HEAD
Run Code Online (Sandbox Code Playgroud)

(当然,如果你有其他的参考,你可能想要用-- --all而不仅仅是重写所有内容HEAD.)

请注意,这与...不兼容--commit-filter; 在这种情况下,Charles Bailey有你的答案.


CB *_*ley 49

只是查看文档filter-branch,您应该能够这样做:

git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
Run Code Online (Sandbox Code Playgroud)

  • +1为此.如果已经转换了svn存储库,通常会生成大量空提交,这非常有用 (4认同)
  • @ SeB.Fr:我不知道这是不是你的情况,但可能[这](https://github.com/git/git/commit/79bc4ef3686bc6795aa79a1d4aa6d3060a2cbd93)? (2认同)