web-dev-qa-db-ja.com

Git-フィルターブランチを使用して空のチェンジセットを持つコミットを削除する

Git filter-branchを使用して、変更セットのないコミットを削除するにはどうすればよいですか?

以下を使用してgit履歴を書き直しました。

git filter-branch --tree-filter 'rm -r -f my_folder' -f HEAD

これはうまくいきましたが、今では空のチェンジセットを使用した多くのコミットがあります。これらのコミットを削除したいと思います。できればmsysgitで。

4000を超えるコミットがあり、その半分を削除する必要があるため、リベースは実際にはオプションではありません。

75
Paul Pladijs

--Prune-emptyオプションを追加するだけです:

git filter-branch --tree-filter 'rm -rf my_folder' --Prune-empty -f HEAD

(もちろん、他の参照がある場合は、HEADだけでなく-- --allですべてを書き換えたい場合があります。)

これは--commit-filterと互換性がないことに注意してください。その場合、 Charles Baileyが答えを持っています

70
Cascabel

filter-branchのドキュメントを見るだけで、次のことができるはずです。

git filter-branch --commit-filter 'git_commit_non_empty_tree "$@"' HEAD
49
CB Bailey