#!/usr/bin/env bash # 将 dev 合并到 main 并推送(生产分支,不含部署) # 用法: deploy/git-sync-to-main.sh [merge message] # 合并后发生产: deploy/deploy-prod.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" GIT_REMOTE="${GIT_REMOTE:-origin}" DEV_BRANCH="${DEV_BRANCH:-dev_jacy}" STAGING_BRANCH="${STAGING_BRANCH:-dev}" PROD_BRANCH="${PROD_BRANCH:-main}" MERGE_MSG="${1:-merge($STAGING_BRANCH): sync to $PROD_BRANCH}" cd "$REPO_ROOT" if [[ -n "$(git status --porcelain)" ]]; then echo "ERROR: 工作区有未提交更改,请先 commit 或 stash" >&2 exit 1 fi ORIGINAL="$(git branch --show-current)" echo "==> fetch $GIT_REMOTE" git fetch "$GIT_REMOTE" echo "==> checkout $PROD_BRANCH" git checkout "$PROD_BRANCH" git pull "$GIT_REMOTE" "$PROD_BRANCH" echo "==> merge $STAGING_BRANCH -> $PROD_BRANCH" git merge "$STAGING_BRANCH" -m "$MERGE_MSG" echo "==> push $PROD_BRANCH" git push "$GIT_REMOTE" "$PROD_BRANCH" if git show-ref --verify --quiet "refs/heads/$DEV_BRANCH"; then echo "==> checkout $DEV_BRANCH" git checkout "$DEV_BRANCH" elif [[ "$ORIGINAL" != "$PROD_BRANCH" ]]; then echo "==> checkout $ORIGINAL" git checkout "$ORIGINAL" fi echo "==> 完成: $PROD_BRANCH = $(git rev-parse --short HEAD)" echo " 发生产请执行: bash deploy/deploy-prod.sh"