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

GitHub Desktop提交丢失求助:分支合并后提交内容消失

问题分析与解决方案:GitHub Desktop协作中提交消失与空合并提交问题

问题原因判断

这确实和GitHub Desktop的合并操作逻辑有关。同事的操作流程中,本地revamp分支停留在commit A,提交commit B后拉取你已推送的commit1-3,GitHub Desktop默认执行了非快进合并,但由于本地提交与远程提交无文件冲突或合并时的逻辑处理问题,生成了无文件变更的空合并提交。推送后远程revamp分支的HEAD指向该合并提交,你的commit1-3被作为合并提交的父节点隐藏,导致你拉取后本地代码库中看不到这些提交的变更,但Git历史中仍能追溯到它们。

可行解决方案

1. 直接恢复你的提交到revamp分支

  • 打开终端,切换到revamp分支:git checkout revamp
  • 执行git log --oneline找到你commit3的哈希值(格式类似def456 commit3)以及空合并提交的哈希值
  • 重置分支到commit3:git reset --hard def456
  • 安全强制推送到远程:git push --force-with-lease(执行前需确认同事没有在该分支新增未同步的提交)

2. 保留同事的commit B同时恢复你的提交

  • 从commit3创建临时分支:git checkout -b temp-recover def456
  • 把同事的commit B cherry-pick到该分支:git cherry-pick <commitB的哈希>
  • 切换回revamp分支并重置到临时分支:git checkout revamp && git reset --hard temp-recover
  • 删除临时分支并推送:git branch -D temp-recover && git push --force-with-lease

3. 回滚空合并提交(终端操作)

GitHub Desktop无法回滚是空合并提交无文件变更导致的,用终端执行:

  • 找到空合并提交的哈希值(格式类似abc123)
  • 执行git revert -m 1 abc123,-m 1指定保留合并提交的第一个父分支内容(即你的提交所在分支)
  • 提交并推送该回滚操作:git push

后续协作建议

  • 提交代码前先执行git pull --rebase,用变基方式拉取远程变更,保持分支历史线性,避免多余合并提交
  • 使用GitHub Desktop时,拉取远程变更前确认本地分支是否与远程同步,避免在落后分支提交后再合并导致历史混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:22:34