Git push --mirror同步GitHub到CodeCommit报错:拒绝删除默认分支master
问题原因分析
git push --mirror的核心作用是让远程仓库和本地仓库完全一致——它会推送本地所有分支、标签到远程,同时删除远程存在但本地没有的所有refs。
你切换到preprod分支后触发报错,是因为:
- AWS CodeCommit仓库的默认分支是
master - 此时你的本地仓库中可能没有
master分支(或本地master分支被移除/标记为待删除),--mirror会尝试让远程同步这个状态,也就是删除远程的master分支 - CodeCommit禁止删除当前设置的默认分支,因此抛出拒绝删除的错误
解决方法
根据你的需求,有几种可选方案:
方案1:替换--mirror为非镜像推送(推荐)
如果你的目标只是同步本地所有分支和标签到CodeCommit,不需要删除远程已有的分支(比如保留master),可以把git push sync --mirror替换成两条命令:
git push sync --all git push sync --tags
--all会推送本地所有分支,--tags推送所有标签,且不会删除远程已有的分支,完美避开默认分支无法删除的限制。
方案2:修改CodeCommit的默认分支
如果你确实需要用--mirror,且希望preprod成为默认分支,可以在AWS控制台修改CodeCommit仓库的默认分支:
- 进入CodeCommit仓库页面
- 点击「Settings」→「Branch settings」
- 把默认分支改成
preprod
之后再执行git push sync --mirror就不会触发删除master的操作(如果本地仍保留master分支),或者允许删除master(如果本地已移除)。
方案3:确保本地始终保留master分支
如果必须用--mirror,且要保留master作为默认分支,在执行push前先确保本地存在master分支:
git fetch sync master git checkout master git checkout preprod # 切回你需要的分支 git push sync --mirror
这样本地有master分支,--mirror就不会尝试删除远程的master,同步就能正常完成。
内容的提问来源于stack exchange,提问作者Eva
相关产品推荐
相关产品推荐

