What command(s) can I use to find empty commits in a git repository, i.e. the commits that would be removed by git filter-branch --prune-empty
?
As a first approximation, list all commits in reverse order and log any line that has the same tree hash as the one before:
git log --all --reverse --format='%H %t' | while read h t; do
if [ "$lt" = "$t" ]; then
echo "$h"
fi
lt="$t"
done
You could improve this by ignoring any commit with multiple parents and confirming that the logged line is actually a child of the one before.