Git pull成功后新提交推送触发remote rejected错误求助
问题根因
你报错的核心原因是直接将服务器上处于检出状态的非裸Git仓库作为推送目标,Git默认禁止推送内容到非裸仓库的当前活动分支,刚好你服务器public_html目录下存在未被Git暂存的修改,触发了校验规则。
修复步骤
- 步骤1:登录cpanel服务器,进入public_html目录,先手动备份所有未被Git追踪的文件(避免操作丢失数据),执行以下命令查看未暂存的修改:
git status
你可以按需将这些修改提交、暂存或删除,保证服务器工作区干净。如果这些修改不需要保留,直接执行git reset --hard && git clean -f强制清空工作区的变更和未追踪文件即可。
- 步骤2:调整服务器仓库的配置,允许推送内容到当前检出的分支,执行命令:
git config receive.denyCurrentBranch updateInstead
该配置的作用是当你推送内容到当前分支时,Git会自动更新服务器的工作区到最新提交的状态,刚好适配网站部署需求,推送完成后public_html的内容会自动同步为你本地提交的版本。
- 步骤3:回到本地仓库,执行一次pull保证本地和远程同步,再测试推送即可:
git pull origin master # 完成本地修改后正常走提交流程 git add . git commit -m "测试提交" git push origin master
克隆无文件问题补充
你此前克隆仓库拿不到文件,大概率是服务器public_html的文件一开始没有被提交到Git仓库。你第一次在服务器初始化Git仓库后,需要先执行git add . && git commit -m "初始化提交"把现有文件提交到仓库,之后克隆就能正常拉取到所有文件。
可选进阶方案:如果担心直接修改public_html的仓库配置有风险,可以在服务器非web可访问目录创建一个裸仓库作为推送目标,配置post-receive钩子自动将代码同步到public_html目录,适合更规范的部署场景。
内容的提问来源于stack exchange,提问作者Scott132
相关产品推荐
相关产品推荐

