#!/bin/sh merge_msg="Merge branch '\(.*\)'" x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' x40="$x40$x40$x40$x40$x40$x40$x40$x40" LF=' ' echo '#!/bin/sh accept_rerere=t while case "$#,$1" in 0,*) break;; *,-*) ;; *) break ;; esac do case "$1" in -n) accept_rerere= ;; *) echo "$0 [-n]"; exit 1 ;; esac shift done accept_rerere () { if test -z "$accept_rerere" then return 1 fi if git diff | grep -e "^.+" -e "^+." | grep -e "^..<<<<<<<" -e "^..=======" -e "^..>>>>>>>" >/dev/null then return 1 else EDITOR=: git commit -a return 0 fi } while read branch eh do case "$eh" in "") echo >&2 "* $branch" git merge "$branch" || accept_rerere || exit ;; pick" "*) echo >&2 "* $eh" git cherry-pick "$branch" || exit ;; *) echo >&2 "Eh? $branch $eh"; exit ;; esac done </dev/null) && merged=$(git name-rev --refs="refs/heads/$branch" "$other" 2>/dev/null) && merged=$(expr "$merged" : "$x40 \(.*\)") && test "$merged" != undefined || { other=$(git log -1 --pretty='format:%s' $other) && merged="$branch :rebased? $other" } } show_pick () { merged="$(git rev-parse --verify "$commit") pick $msg" } git log --pretty=oneline --first-parent "$1" | { series= while read commit msg do if other=$(git rev-parse -q --verify "$commit^2") then show_merge else show_pick fi if test -z "$series" then series="$merged" else series="$merged$LF$series" fi done echo "$series" } echo 'EOF'