merge_dev_to_pro.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/bin/bash
  2. # 用于将 dev 分支合并到 prod 分支,保留 prod 配置文件版本
  3. # 支持第一次对齐历史 & 后续增量合并
  4. # 使用方法:
  5. # bash scripts/merge_dev_to_pro.sh first # 第一次合并
  6. # bash scripts/merge_dev_to_pro.sh # 以后正常合并
  7. CONFIG_FILES=("Jenkinsfile" "Dockerfile" "nginx.conf")
  8. # 确保脚本在项目根目录运行
  9. if [ ! -d .git ]; then
  10. echo "❌ 请在 Git 项目根目录运行此脚本"
  11. exit 1
  12. fi
  13. # 检查是否有未提交的更改
  14. if ! git diff --quiet || ! git diff --cached --quiet; then
  15. echo "❌ 检测到本地有未提交的改动,请先提交或暂存后再执行合并"
  16. exit 1
  17. fi
  18. # 更新本地分支
  19. echo "📦 更新本地分支..."
  20. git checkout prod && git pull origin prod || exit 1
  21. git checkout dev && git pull origin dev || exit 1
  22. # 切回 prod 分支
  23. git checkout prod || exit 1
  24. # 执行合并
  25. if [ "$1" == "first" ]; then
  26. echo "🚀 第一次对齐历史,准备合并 dev..."
  27. git merge dev --no-commit || exit 1
  28. else
  29. echo "🔄 增量合并 dev..."
  30. git merge dev --no-commit || exit 1
  31. fi
  32. # 保留 prod 分支的配置文件
  33. echo "🛡 保留 prod 配置文件版本..."
  34. for file in "${CONFIG_FILES[@]}"; do
  35. if [ -f "$file" ]; then
  36. git checkout --ours "$file"
  37. git add "$file"
  38. echo " ✅ 已保留 $file"
  39. else
  40. echo " ⚠️ $file 在当前分支不存在,跳过"
  41. fi
  42. done
  43. # 提交合并
  44. git commit -m "Merge dev into prod (keep prod config files)"
  45. # 推送确认
  46. read -p "🚀 是否推送到远程 prod 分支?(y/N) " confirm
  47. if [[ "$confirm" =~ ^[Yy]$ ]]; then
  48. git push origin prod
  49. echo "✅ 已推送到远程 prod 分支"
  50. else
  51. echo "⏸ 已取消推送,可手动执行:git push origin prod"
  52. fi