#!/bin/bash # 用于将 dev 分支合并到 prod 分支,保留 prod 配置文件版本 # 支持第一次对齐历史 & 后续增量合并 # 使用方法: # bash scripts/merge_dev_to_pro.sh first # 第一次合并 # bash scripts/merge_dev_to_pro.sh # 以后正常合并 CONFIG_FILES=("Jenkinsfile" "Dockerfile" "nginx.conf") # 确保脚本在项目根目录运行 if [ ! -d .git ]; then echo "❌ 请在 Git 项目根目录运行此脚本" exit 1 fi # 检查是否有未提交的更改 if ! git diff --quiet || ! git diff --cached --quiet; then echo "❌ 检测到本地有未提交的改动,请先提交或暂存后再执行合并" exit 1 fi # 更新本地分支 echo "📦 更新本地分支..." git checkout prod && git pull origin prod || exit 1 git checkout dev && git pull origin dev || exit 1 # 切回 prod 分支 git checkout prod || exit 1 # 执行合并 if [ "$1" == "first" ]; then echo "🚀 第一次对齐历史,准备合并 dev..." git merge dev --no-commit || exit 1 else echo "🔄 增量合并 dev..." git merge dev --no-commit || exit 1 fi # 保留 prod 分支的配置文件 echo "🛡 保留 prod 配置文件版本..." for file in "${CONFIG_FILES[@]}"; do if [ -f "$file" ]; then git checkout --ours "$file" git add "$file" echo " ✅ 已保留 $file" else echo " ⚠️ $file 在当前分支不存在,跳过" fi done # 提交合并 git commit -m "Merge dev into prod (keep prod config files)" # 推送确认 read -p "🚀 是否推送到远程 prod 分支?(y/N) " confirm if [[ "$confirm" =~ ^[Yy]$ ]]; then git push origin prod echo "✅ 已推送到远程 prod 分支" else echo "⏸ 已取消推送,可手动执行:git push origin prod" fi