如何使用git filter-branch删除没有更改集的提交?
我使用以下方式重写了我的git历史记录:
git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD
这个工作很好,但是现在我有很多带有空变更集的提交。我想删除那些提交。最好在msysgit中。
变基不是真正的选择,因为我有4000多个提交,其中一半必须删除。
如何使用git filter-branch删除没有更改集的提交?
我使用以下方式重写了我的git历史记录:
git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD
这个工作很好,但是现在我有很多带有空变更集的提交。我想删除那些提交。最好在msysgit中。
变基不是真正的选择,因为我有4000多个提交,其中一半必须删除。
--tree-filter ...
),现在只是想摆脱挥之不去的空提交,那可以节省我的培根:(git filter-branch --prune-empty
只是filter-branch
命令没有任何“过滤器”)-如stackoverflow.com/questions/28313664所示/… -当下面的Jefromi的答案(stackoverflow.com/questions/5324799/…)产生错误报告时,这很有用Found nothing to rewrite
Answers:
只需添加--prune-empty
选项:
git filter-branch --tree-filter 'rm -rf my_folder' --prune-empty -f HEAD
(当然,如果您还有其他引用,则可能要用-- --all
而不是重写所有内容HEAD
。)
请注意,这与--commit-filter
;不兼容;在这种情况下,查尔斯·贝利(Charles Bailey)有您的答案。
只需查看的文档filter-branch
,您就可以做到这一点:
git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
--index-filter
与git rm -r --ignore-unmatch --cached my_folder
比快得多--tree-filter
,因为它并没有检查出每个修订。它完全在索引上运行。