如何重构Git分支:调整提交历史修复跨分支合并内容丢失问题
操作前置准备
操作前先完整备份本地仓库目录,避免误操作丢失代码。执行以下命令确保本地和远程代码同步,无未提交变更:
git fetch origin git status # 如有未提交的修改,执行git stash暂存,操作完成后可git stash pop恢复
分支重构步骤
1. 重构wp-dev分支(解决合并删STUFF的核心问题)
将wp-dev上从9174d5c开始的所有提交,整体迁移到1a8d0ac节点之后:
git checkout wp-dev git rebase --onto 1a8d0ac 1886f04 wp-dev
- 变基过程中如果出现冲突,手动修改冲突文件后执行
git add <冲突文件名>,再执行git rebase --continue直到变基完成。 - 操作完成后wp-dev的提交链变为:
1a8d0ac -> 9174d5c -> 0a2c1d7 -> 5439ac8 -> 74e522a,STUFF相关内容会完整保留,后续合并static-dev的改动不会再被删除。
2. 清理static-dev分支的冗余提交
当前static-dev存在重复的A提交和多余的合并记录,直接重置到正确的A节点7890397即可:
git checkout static-dev git reset --hard 7890397
3. 修复main分支的提交历史
将main分支重置到1a8d0ac节点,和你期望的主线结构对齐,后续可按需合并static-dev的改动:
git checkout main git reset --hard 1a8d0ac # 后续如果要把A提交同步到main,执行:git merge static-dev
4. 同步修改到远程仓库
因为修改了提交历史,需要强制推送覆盖远程分支,当前只有你一人操作仓库不会影响其他人:
# --force-with-lease会先检查远程是否有你未拉取的新提交,比直接--force更安全 git push origin main --force-with-lease git push origin static-dev --force-with-lease git push origin wp-dev --force-with-lease
后续迭代规范
- static-dev的改动完成后,可正常合并到main,也可定期合并到wp-dev同步更新,不会再出现内容丢失问题
- wp-dev的专属改动仅在wp-dev分支提交,需要上线的改动可先合并到static-dev,再同步到main
内容的提问来源于stack exchange,提问作者philolegein
相关产品推荐
相关产品推荐

