#!/usr/bin/env bash # 将 dev_jacy 合并到 dev 并推送(staging 测试分支) # 用法: deploy/git-sync-to-dev.sh [merge message] 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}" MERGE_MSG="${1:-merge($DEV_BRANCH): sync to $STAGING_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" if git show-ref --verify --quiet "refs/heads/$DEV_BRANCH"; then echo "==> push $DEV_BRANCH" git push "$GIT_REMOTE" "$DEV_BRANCH" fi echo "==> checkout $STAGING_BRANCH" git checkout "$STAGING_BRANCH" git pull "$GIT_REMOTE" "$STAGING_BRANCH" echo "==> merge $DEV_BRANCH -> $STAGING_BRANCH" git merge "$DEV_BRANCH" -m "$MERGE_MSG" echo "==> push $STAGING_BRANCH" git push "$GIT_REMOTE" "$STAGING_BRANCH" if git show-ref --verify --quiet "refs/heads/$DEV_BRANCH"; then echo "==> checkout $DEV_BRANCH" git checkout "$DEV_BRANCH" elif [[ "$ORIGINAL" != "$STAGING_BRANCH" ]]; then echo "==> checkout $ORIGINAL" git checkout "$ORIGINAL" fi echo "==> 完成: $STAGING_BRANCH = $(git rev-parse --short HEAD)"