#!/bin/bash set -euo pipefail IFS=$'\n\t' print_error() { echo "Error: \`$1\` is not a valid commit. To debug, run:" echo echo " git rev-parse --verify $1" echo } full_sha() { git rev-parse \ --verify \ --quiet \ "$1^{object}" || print_error $1 } commit_message_with_backport_note() { message=$(git log --format=%B -n 1 $1) echo $message | awk "NR==1{print; print \"\n(backport-of: $1)\"} NR!=1" } cherry_pick_commit() { sha=$(full_sha $1) git cherry-pick $sha > /dev/null git commit \ --amend \ --file <(commit_message_with_backport_note $sha) } for arg ; do cherry_pick_commit $arg done