执行Git rebase时合并使用旧提交而非最新提交该如何处理
Git rebase 未使用最新本地提交的解决方案
核心问题原因
你执行的git rebase -i upstream develop命令存在参数错误:第一个参数需要是上游分支的完整引用,而不是远程仓库名,git会因为无法识别上游分支的指向,错误选择了旧的提交作为rebase基底。另外你提到持续回退的提交来自之前的PR,说明该提交已经存在于上游分支中,git默认会跳过已经合入上游的提交,也会导致最终提交列表不符合预期。
修复步骤
- 第一步:先同步上游和自己远程仓库的最新代码
执行完成后用git fetch upstream git checkout develop git pull origin developgit log --oneline -n 10确认输出的前5条是你预期的1-5号提交,记录最新提交的哈希值方便后续校验。 - 第二步:执行正确的rebase命令,如果你要强制将最近5条提交全部应用到上游develop分支上,可以直接指定rebase范围:
如果你不需要指定范围,直接用标准rebase命令即可:git rebase -i --onto upstream/develop HEAD~5git rebase -i upstream/develop - 第三步:在弹出的vim交互界面调整提交状态
需要保留的提交保持pick状态,需要合并的提交将前缀改为s(squash缩写),确认列表里的提交是你需要的所有提交后保存退出。 - 第四步:解决完冲突后执行
git rebase --continue完成rebase流程,结束后再次用git log确认提交记录和你预期的最新变更一致即可。
异常处理
如果操作过程中rebase卡住不符合预期,随时执行git rebase --abort终止当前流程,回到操作前的状态后重新执行步骤即可。
内容的提问来源于stack exchange,提问作者infiniteLoopLife9
相关产品推荐
相关产品推荐

