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

使用Git Rebase构建线性提交历史遇重复提交问题求助

解决Git Rebase后提交重复的问题

问题原因

你执行git pull --rebase origin master后,本地feature分支的提交链变为A---B---E---C'---D',但此时远程feature分支仍然保留着旧的A---B---C---D历史。之后你直接执行git pull,Git会自动将远程的旧feature分支与本地rebase后的分支进行合并,最终导致原提交C、D和复制后的C'、D'同时出现在历史中,形成分叉。

解决方法

方法一:交互式Rebase清理重复提交(已推送远程的场景)

  1. 拉取远程最新代码:git fetch origin
  2. 切换到feature分支:git checkout feature
  3. 启动交互式Rebase到共同父提交B(替换成实际的B提交哈希值):
    git rebase -i B
    
  4. 在弹出的编辑器中,找到重复的C、D或C'、D'提交,将它们行首的pick改为drop,保存并退出编辑器。
  5. 如果Rebase过程中出现冲突,手动解决冲突后执行:git rebase --continue
  6. 清理完成后,安全强制推送到远程(避免覆盖他人未同步的提交):
    git push origin feature --force-with-lease
    

方法二:重置分支后重新Rebase(适合未推送或团队允许改写历史的场景)

  1. 找到rebase后生成的C'提交的哈希值(即E之后的第一个提交)
  2. 重置feature分支到该提交:
    git reset --hard C'
    
  3. 再次同步master分支的最新提交:git rebase origin master
  4. 强制推送到远程:git push origin feature --force-with-lease

注意事项

  • 强制推送会改写远程分支的历史,若团队成员已拉取该分支,他们需要执行git pull --rebase来同步历史,否则会引发新的冲突。
  • 后续在本地Rebase完成后,直接使用git push --force-with-lease推送,不要执行git pull,避免再次合并旧历史。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:42:38