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
相关产品推荐
相关产品推荐

