How can I find empty git commits?

后端 未结 2 476
清酒与你
清酒与你 2021-01-12 06:11

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?

相关标签:
2条回答
  • 2021-01-12 06:51

    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.

    0 讨论(0)
  • 2021-01-12 07:02

    You'd want to exclude parentless commits and merge commits, then see which ones have the same tree as their parent.

    for sha in $(git rev-list --min-parents=1 --max-parents=1 --all)
    do
       if [ $(git rev-parse ${sha}^{tree}) == $(git rev-parse ${sha}^1^{tree} ) ]
       then
           echo "${sha} will be pruned"
       fi
    done
    
    0 讨论(0)
提交回复
热议问题