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

Git丢失已合并内容,明明有差异却显示分支无变更

解决Git分支丢失已合并特性的方案

第一步:定位丢失的合并记录

先找出所有本该合并到dev的PR对应的合并提交,确认它们是否还在dev的提交历史中:

  • 执行git log --merges --grep="Merge pull request"命令,列出dev分支上所有PR合并记录,和GitHub上的PR列表对比,筛选出存在PR但不在本地dev历史里的合并提交。
  • 也可以直接在GitHub的PR页面获取合并提交哈希,再用git log --oneline | grep <合并提交哈希>在本地dev分支验证是否存在。

第二步:恢复丢失的变更

场景1:合并提交被重置/回滚撤销

如果合并提交被git reset或git revert取消,可通过cherry-pick强制重新应用变更(因为Git判定无变更,需手动确认):

git checkout dev
git cherry-pick <特性分支的提交哈希> --no-commit

此时变更会被放到工作区,确认代码无误后提交:

git add .
git commit -m "恢复[PR编号]的特性变更"

若有多个缺失特性,可收集对应提交哈希批量执行上述操作。

场景2:分支历史被强制推送覆盖

如果dev分支的远程历史被force push覆盖,先从远程reflog找回旧状态:

git fetch origin
git reflog show origin/dev

找到被覆盖前的dev分支哈希,重置并推送:

git checkout dev
git reset --hard <旧的dev分支哈希>
git push origin dev --force

⚠️ 强制推送会覆盖远程分支历史,需提前告知团队所有成员,之后所有人要重新拉取最新分支。

第三步:预防后续问题

  • 在GitHub仓库设置中开启分支保护,限制dev和live分支的直接推送权限,仅允许通过PR合并,禁止强制推送。
  • 发布到live分支时,使用git merge --no-ff dev保留完整合并历史,方便后续排查。
  • 定期用git log --graph查看dev和live的提交链,确认合并记录完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28