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

执行git rebase main后feature分支部分提交消失如何解决?

解决方法

1. 先恢复rebase前的状态

git的所有操作都会被记录在reflog里,你可以通过它找回丢失的提交:

  • 执行 git reflog,找到你运行git rebase main之前,feature分支对应的提交哈希(比如就是你原来的j44提交哈希)。
  • 执行以下命令恢复到rebase前的状态:
git checkout feature
git reset --hard <rebase前的feature头哈希>

执行完后,你丢失的j44、o64、p22提交就会重新出现在feature分支的log里。

2. 正确执行rebase(保留合并提交)

默认的git rebase会自动跳过合并提交(像p22这种merge branch的提交),因为它默认只处理线性的提交历史。如果需要保留这些合并提交和后续的提交,你需要加上--rebase-merges参数:

git checkout feature
git rebase --rebase-merges main

这个命令会保留你feature分支原有的合并结构,同时把所有提交(包括j44、o64、p22)都“重放”到main分支的顶端。

3. 手动筛选提交(不需要合并提交时用)

如果你不想保留p22这个合并提交,只想把j44、o64、x11、y88这几个提交移到main顶端,可以用交互式rebase:

  • 执行命令:
git checkout feature
git rebase -i main
  • 弹出的编辑界面里会列出feature分支上所有不在main分支里的提交,找到j44、o64、p22、x11、y88这些条目:
    • 保留j44、o64、x11、y88前面的pick
    • 把p22前面的pick改成drop(或者直接删除这一行)
  • 保存退出后,git就会只应用你选中的提交,跳过p22,最终你需要的提交都会出现在main分支顶端。

为什么会出现提交“丢失”?

  • git rebase的核心是把当前分支上和目标分支(main)不重复的线性提交,重新应用到目标分支的顶端。默认情况下,它会跳过合并提交(因为合并提交是用来整合分支的,不属于线性的功能提交)。
  • 你的j44、o64是在p22这个合并提交之后的提交,当rebase跳过p22时,后续的这两个提交也没有被重新应用,所以看起来像是丢失了——但实际上这些提交只是没被移到新的rebase后的分支上,通过reflog就能找回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 10:02:44