求Shell/Bash脚本:将origin/master合并至所有远程分支
Bash Script to Merge origin/master into All Remote Branches
我帮你写了一个实用的Bash脚本,能完成把origin/master合并到所有远程分支的需求,同时我会拆解每一步的作用,方便你根据自己的场景调整:
#!/bin/bash # 定义临时克隆目录 TMP_FOLDER="tmp-clone" # 如果临时目录存在,先删除避免残留旧数据 if [ -d "$TMP_FOLDER" ]; then rm -rf "$TMP_FOLDER" fi # 克隆远程仓库到临时目录(替换成你的实际仓库地址) git clone "你的Git仓库URL" "$TMP_FOLDER" # 进入临时目录,失败则退出脚本 cd "$TMP_FOLDER" || exit 1 # 获取所有需要处理的远程分支:排除HEAD和master,去掉origin/前缀 REMOTE_BRANCHES=$(git branch -r | grep -v 'HEAD\|master' | sed 's/origin\///') # 循环处理每个目标分支 for BRANCH in $REMOTE_BRANCHES; do echo "开始处理分支: $BRANCH" # 切换到目标分支,失败则跳过当前分支 git checkout "$BRANCH" || { echo "切换分支$BRANCH失败,跳过"; continue; } # 拉取该分支的最新远程代码 git pull origin "$BRANCH" # 合并origin/master到当前分支 git merge origin/master # 检查合并是否成功:无冲突则推送到远程,有冲突则提示手动处理 if [ $? -eq 0 ]; then git push origin "$BRANCH" echo "分支$BRANCH合并并推送成功" else echo "分支$BRANCH合并出现冲突,请手动解决后重新执行脚本" # 若需要遇到冲突就终止脚本,可取消下面的注释 # exit 1 fi echo "------------------------" done # 返回上级目录并清理临时文件 cd .. rm -rf "$TMP_FOLDER" echo "所有分支处理完成!"
脚本关键细节说明:
- 干净环境保障:每次运行先清理旧的临时目录,确保操作基于最新的仓库状态
- 分支精准筛选:通过
grep排除不需要的HEAD和master分支,用sed剥离origin/前缀,得到纯粹的分支名 - 容错处理:切换分支失败时自动跳过当前分支,合并冲突时给出明确提示,避免脚本直接崩溃
- 自动清理:操作完成后自动删除临时目录,保持本地环境整洁
使用提示:
- 记得把脚本中的
你的Git仓库URL替换成实际的仓库地址 - 建议先在测试仓库验证脚本功能,避免误操作影响生产分支
- 若合并冲突,解决后可以单独重新处理该分支,或者直接重新运行整个脚本
内容的提问来源于stack exchange,提问作者casparjespersen
相关产品推荐
相关产品推荐

