mirror of
https://github.com/git/git.git
synced 2026-01-14 21:01:11 +00:00
This is especially necessary when you reverted a premature merge to more stable integration branch while you do want to keep the topic cooking in more experimental integration branch.
61 lines
1.1 KiB
Bash
Executable File
61 lines
1.1 KiB
Bash
Executable File
#!/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
|
|
while read branch eh
|
|
do
|
|
case "$eh" in
|
|
"")
|
|
echo >&2 "* $branch"
|
|
git merge "$branch" || break ;;
|
|
pick" "*)
|
|
echo >&2 "* $eh"
|
|
git cherry-pick "$branch" || break ;;
|
|
*) echo >&2 "Eh? $branch $eh"; break ;;
|
|
esac
|
|
done <<EOF'
|
|
|
|
show_merge () {
|
|
branch=$(expr "$msg" : "$merge_msg") &&
|
|
tip=$(git rev-parse --verify "refs/heads/$branch" 2>/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'
|