cherry-pick

 1# #!/bin/bash
 2set -euxo pipefail
 3
 4if [ "$#" -ne 2 ]; then
 5    echo "Usage: $0 <branch-name> <commit-sha>"
 6    exit 1
 7fi
 8
 9BRANCH_NAME="$1"
10COMMIT_SHA="$2"
11
12SHORT_SHA="${COMMIT_SHA:0:8}"
13NEW_BRANCH="cherry-pick-${BRANCH_NAME}-${SHORT_SHA}"
14git fetch origin
15git checkout "$BRANCH_NAME"
16git checkout -b "$NEW_BRANCH"
17
18git cherry-pick "$COMMIT_SHA"
19
20git push origin "$NEW_BRANCH"
21COMMIT_TITLE=$(git log -1 --pretty=format:"%s" "$COMMIT_SHA")
22COMMIT_BODY=$(git log -1 --pretty=format:"%b" "$COMMIT_SHA")
23
24# Check if commit title ends with (#number)
25if [[ "$COMMIT_TITLE" =~ \(#([0-9]+)\)$ ]]; then
26    PR_NUMBER="${BASH_REMATCH[1]}"
27    PR_BODY="Cherry-pick of #${PR_NUMBER}"$'\n'$'\n'"----"$'\n'"${COMMIT_BODY}"
28else
29    PR_BODY="Cherry-pick of ${COMMIT_SHA}"$'\n'$'\n'"----"$'\n'"${COMMIT_BODY}"
30fi
31
32# Create a pull request
33gh pr create --base "$BRANCH_NAME" --head "$NEW_BRANCH" --title "$COMMIT_TITLE (cherry-pick)" --body "$PR_BODY"