You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

origin/master提交泄露至slave/master分支历史,Git推送失败求助

排查Git裸仓库推送失败的问题

我来帮你搞定这个奇怪的推送失败问题!先把能复现问题的脚本整理出来,方便大家一起分析:

# 创建并进入测试目录
mkdir git-test && cd git-test

# 初始化两个裸仓库
git init --bare king.git
git init --bare slave.git

# 克隆king裸仓库到本地工作区,用于提交代码
git clone king.git local-king && cd local-king

# 添加slave作为远程仓库
git remote add slave ../slave.git

# 创建初始提交
echo "Hello Git" > README.md
git add README.md
git commit -m "Initial commit"

# 尝试推送到slave仓库
git push slave master

当执行最后一步git push slave master时,你应该会看到类似这样的错误提示:

! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '../slave.git'

问题原因

这个问题其实是Git版本(2.30及以上)的默认配置变化导致的:

  • 对于裸仓库,Git 2.30+将receive.denyCurrentBranch的默认值从ignore改成了refuse
  • 刚初始化的裸仓库中,HEAD默认指向master分支(但该分支实际不存在),Git会误判你在推送远程的"当前分支",从而拒绝推送

解决方案

有几种简单的办法可以解决这个问题:

  • 方法1:修改slave仓库的配置
    进入slave裸仓库目录,修改Git配置允许推送当前分支:
cd ../slave.git
git config receive.denyCurrentBranch ignore

之后回到本地工作区重新推送即可成功:

cd ../local-king
git push slave master
  • 方法2:推送时显式设置分支(适用于单次推送)
    在推送命令中加上--set-upstream(或简写-u),明确关联本地和远程分支:
git push -u slave master

这个命令会同时完成推送和分支关联,后续推送就不用再加参数了。

  • 方法3:先在slave仓库创建初始分支(可选)
    如果你不想修改配置,也可以先在slave仓库手动创建master分支:
cd ../slave.git
git commit --allow-empty -m "Initial empty commit"

之后再回到本地工作区推送,就不会触发分支检查了。

内容的提问来源于stack exchange,提问作者Yurii Hierts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:12:02