如何删除test_branch除最新提交外的所有提交以避免git rebase冲突?
解决方案
前置检查
执行git status确认当前test_branch的工作区、暂存区没有未提交的修改,避免操作过程中丢失代码内容。
可选操作:备份当前分支
为避免操作失误丢失历史内容,先给当前test_branch生成本地备份:git branch test_branch_backup
后续如果操作出错,可以直接从备份分支恢复原有内容。
步骤1:同步本地master的最新代码
git checkout master git pull origin master git checkout test_branch
保证本地master是和远程一致的最新版本。
步骤2:软重置分支到master节点
执行以下命令,将test_branch的HEAD指针指向最新的master节点,同时保留你在test_branch上的所有代码修改到暂存区:git reset --soft master
步骤3:生成单条汇总提交
此时test_branch和master的所有差异都已经在暂存区,直接提交即可生成唯一的新提交:git commit -m "填写你的提交说明,汇总test_branch的所有修改"
步骤4:强制推送更新远程PR
因为修改了分支的提交历史,需要强制推送覆盖远程的test_branch,GitHub上对应的开放PR会自动更新为当前的单条提交,无需新建PR:git push -f origin test_branch
注意事项
- 操作完成后test_branch仅存在1条和master无交叉历史的新提交,后续同步master变更时仅需要解决一次冲突,不需要逐个提交处理。
- 该操作仅修改test_branch的提交历史,不会影响master分支的内容。
- 如果有其他协作者共同使用test_branch,操作前需要同步所有协作者,避免其他人的本地分支和重置后的远程分支产生历史冲突。
内容的提问来源于stack exchange,提问作者Jason M
相关产品推荐
相关产品推荐

