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

向空远程仓库推送master分支被拒的解决方法

问题根因

远程服务器上创建的是带工作区的非裸(non-bare)Git仓库,且该仓库当前正检出master分支。
Git默认拦截向非裸仓库当前检出分支的推送请求:这类推送会直接修改仓库的HEAD提交指向,但不会自动同步更新仓库对应的工作目录、暂存区内容,会导致仓库元数据和实际工作区文件不一致,后续在远程仓库操作时极易出现冲突、状态混乱。
推送其他分支不受影响,是因为其他分支并非远程仓库当前的检出分支,推送操作不会改动远程仓库当前工作区关联的分支状态,因此不会触发拦截规则。

解决方法

标准方案(推荐,适用于所有协作/正式场景)

裸仓库是Git设计中专门用作共享远程节点的仓库形式,没有独立工作区,仅存储版本元数据,不存在工作区不一致的问题,是所有Git远程服务默认使用的仓库形式。
因为你当前远程仓库是新建的空仓库,直接重新初始化裸仓库即可:

  • 登录IP为100.100.100.100的远程服务器,进入你之前创建test-repo.git的对应路径
  • 删除之前创建错误的非裸仓库,重新初始化裸仓库:
# 注意替换为你实际的仓库存放路径,避免误删其他文件
rm -rf /your/actual/path/test-repo.git
git init --bare test-repo.git
  • 回到本地环境,直接执行推送命令即可完成master分支推送:
git push -u origin master

后续推送其他分支、拉取代码的操作都可以正常执行,不会再出现同类报错。

临时方案(仅适用于本地单人测试场景,不推荐生产/协作环境使用)

如果不想调整远程仓库类型,可以直接修改远程仓库的配置,放开分支推送拦截:

  • 登录远程服务器,进入test-repo.git仓库目录
  • 执行配置修改命令:
git config receive.denyCurrentBranch ignore

配置完成后本地即可正常推送master分支。
注意:该配置下每次向master分支推送完成后,都需要登录远程服务器进入仓库工作目录执行git reset --hard,才能让远程工作区的文件和最新推送的提交保持一致,否则远程仓库的实际文件会停留在推送前的旧版本,极易引发后续操作错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:45:31