如何使用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个提交,其中一半必须被删除。
只需添加--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
git rm -r --ignore-unmatch --cached my_folder
与--index-filter
结合使用比--tree-filter
更快,因为它不必检出每个修订版本。它完全在索引上操作。 - vmrob--tree-filter...
)的工作,现在只想摆脱那些空的提交,以下命令可以解决这个问题:git filter-branch --prune-empty
(只使用filter-branch
命令不带任何'filter'),参见https://dev59.com/hV4c5IYBdhLWcg3wHHCY。当Jefromi下面的回答(https://dev59.com/uG435IYBdhLWcg3wlRMf)生成错误报告“Found nothing to rewrite”时,此方法非常有用。 - Ger Hobbelt