Git生产服务器master领先origin/master26次提交的异常问题
一、先解决Git认证报错问题
当前执行git fetch、git pull时提示密码读取失败,这是核心阻碍,先搞定认证才能同步远程仓库的正确状态:
临时应急方案(不推荐长期使用):修改远程URL,直接嵌入账号密码
把origin的URL改成带密码的格式,让Git直接用URL里的凭据认证:git remote set-url origin https://{username}:{password}@bitbucket.org/{account}/mii.git注意:如果密码包含特殊字符(如@、&),需要做URL编码,比如@替换成
%40。长期推荐方案:配置Git凭据助手
在生产服务器上设置凭据助手,让Git记住账号密码,避免重复输入:# 针对当前仓库配置 git config credential.helper store # 或者全局配置(适用于服务器上所有Git仓库) git config --global credential.helper store配置后执行一次
git fetch origin,输入正确的账号密码,Git会自动把凭据存在本地文件里,后续操作就不用再输密码了。
二、修复本地分支与远程的不一致问题
本地master显示领先origin/master26次提交,且git reset --hard origin/master回到旧版本,本质是本地的远程分支指针没同步到远程最新状态:
同步所有远程分支信息
认证问题解决后,执行命令拉取最新远程分支并清理无效的本地远程分支记录:git fetch --prune origin执行完再用
git branch -a查看,就能显示全部4个远程分支了。确认本地多余提交
运行命令查看本地master比远程多的26次提交:git log --oneline origin/master..master结合你说的生产服务器无本地提交,这些提交应该是前开发者的错误操作残留(比如本地提交后未推送、拉取时异常生成的合并提交)。
重置本地master到远程最新版本
确认git fetch --prune origin后,origin/master已经是远程最新状态,执行命令强制同步:git reset --hard origin/master此时本地master会完全匹配远程最新的origin/master,不会再回到旧版本。
三、后续预防措施
- 禁止生产服务器本地提交:在生产仓库执行以下命令,限制直接在本地master提交:
git config receive.denyCurrentBranch updateInstead - 拉取前先同步远程信息:每次拉取代码前,先执行
git fetch --prune origin确保远程分支状态最新,再执行git pull origin master(或用git pull --rebase origin master避免冗余合并提交)。
内容的提问来源于stack exchange,提问作者Daniel

