Git合并未跟踪分支致代码丢失:本地Production分支代码缺失求助
排查本地&服务器production分支代码缺失的问题
嘿,结合你描述的场景(master分支代码完整,production分支缺代码且已部署到服务器),我大概率怀疑是这几个环节出了问题,咱们一步步排查解决:
最可能的原因1:检出production分支时未同步最新远程代码
你说本地production是从remote/origin/production检出的,但如果检出操作之前,你没先执行git fetch origin拉取远程最新提交,那本地检出的其实是远程分支的旧快照,自然会缺失团队后续提交的代码。
排查&修复步骤:
- 先同步所有远程分支的最新状态:
git fetch origin - 查看远程production分支比本地多了哪些提交:
如果输出有提交记录,说明本地确实落后了,直接合并远程代码即可:git log --oneline production..origin/production
(如果合并有冲突,仔细核对冲突代码,确保保留团队提交的内容)git checkout production git merge origin/production
原因2:开发分支合并到production时操作失误
你完成开发分支工作后合并到production的过程中,可能出现了这些问题:
- 解决合并冲突时误删了团队提交的代码
- 用
git reset回滚了不该回滚的提交 - 合并时只挑选了部分提交(比如
git cherry-pick漏了)
排查&修复步骤:
- 查看production分支的合并历史,重点看最近的合并记录:
git log --merges production - 对比production和master分支的代码差异,定位缺失的代码块:
git diff master production - 如果是合并冲突解决错误,找到对应的合并提交,用
git show <合并提交ID>查看当时的合并内容,然后重新修正代码后提交。
原因3:部署服务器时用了旧版本的分支
部署环节也可能出问题:比如部署脚本没拉取最新的远程production分支,而是直接用了本地旧的production分支代码,导致服务器上的代码也是旧的。
排查&修复步骤:
- 登录服务器,查看当前代码的提交ID:
git rev-parse HEAD - 对比这个ID和本地
origin/production的提交ID(本地执行git rev-parse origin/production),如果不一致,说明服务器上是旧版本。 - 服务器上直接拉取最新远程分支并强制切换:
(或者修改部署脚本,确保每次部署前都先拉取远程最新代码)git fetch origin git checkout origin/production -f
原因4:远程origin/production分支本身就未同步master的代码
如果团队成员是先提交到master,再合并到production,可能这个合并步骤没做好——比如成员忘了把master的代码合并到production,或者合并时丢了内容。
排查步骤:
- 对比远程master和production的差异:
如果缺失的代码在git diff origin/master origin/productionorigin/master里但不在origin/production,那就是远程production分支本身落后了,需要在本地合并master到production,再推送到远程。
后续预防建议
- 每次检出或操作远程分支前,先执行
git fetch origin同步最新状态 - 合并分支时尽量用Pull Request(PR)流程,通过代码审查避免误操作
- 部署前务必验证当前分支的提交ID和远程分支一致
- 定期用
git status和git branch -vv检查本地分支和远程分支的关联状态
内容的提问来源于stack exchange,提问作者fabOnReact
相关产品推荐
相关产品推荐

