#!/bin/sh for range in $( prev_branch= { git for-each-ref --format='%(refname)' refs/heads/maint-* | sed -e 's|^refs/heads/||' cat <<-EOF maint master next EOF } | while read branch do if test -n "$prev_branch" then echo "$branch..$prev_branch" fi prev_branch=$branch done ) pu..jch do lg=$(git log --oneline "$range") if test -n "$lg" then echo "*** $range ***" echo "$lg" fi done if next_tree=$(git rev-parse next^{tree}) && next_equiv=$(git rev-list jch..pu | xargs -n1 sh -c ' echo $(git rev-parse $1^{tree}) $1 ' - | sed -n -e "s/^$next_tree //p" ) && test -n "$next_equiv" then jch=$(git rev-list --first-parent master..jch | wc -l) && pu=$(git rev-list --first-parent master..pu | wc -l) && next=$(git rev-list --first-parent master..$next_equiv | wc -l) && echo $jch..$next..$pu else git diff --stat next jch fi