#!/bin/bash ghp="$1"; shift commit="$1"; shift die() { echo "$@" >&2 exit 1 } [ -n "$commit" ] || die "Usage: $0 [github-pull-number] commit-hash" tmpfile=$(tempfile) || die "tempfile failed" trap "rm -f -- '$tmpfile'" EXIT fullcommithash=$(git show --format="format:%H" -s "$commit") gitlogmsg=$(git show --format="format:%B" -s "$commit") if ! { [ -n "$gitlogmsg" ] && [ -n "$fullcommithash" ]; }; then die "git-show failed" fi { echo "${gitlogmsg}" echo echo "Github-Pull: #${ghp}" echo "Rebased-From: ${fullcommithash}" } >"${tmpfile}" git cherry-pick "$commit" rc="$?" case "$rc" in 0) # Success git commit --amend -F "${tmpfile}" -q ;; 1) # cherry-pick has conflicts, just update MERGE_MSG [ -e .git/MERGE_MSG ] || die 'No MERGE_MSG??' cat "${tmpfile}" >.git/MERGE_MSG ;; *) die 'Cherry-pick FAILED' ;; esac