Git分支维护疑问:如何两次Rebase并保持分支结构及分离更改
Git分支变基与重构方案
问题1:对两个分支执行rebase并保持原有结构
按以下步骤操作,可确保MyAwesomeFeature和MyExperiment维持master→MyAwesomeFeature→MyExperiment的层级结构,同时同步最新的远程master:
- 拉取最新远程
master分支git checkout master git pull origin master - 先变基上游分支
MyAwesomeFeature到最新master
这一步会把git checkout MyAwesomeFeature git rebase masterMyAwesomeFeature的所有提交重新应用到最新master顶端,完成上游分支的同步。 - 再变基下游分支
MyExperiment到更新后的MyAwesomeFeature
操作后git checkout MyExperiment git rebase MyAwesomeFeatureMyExperiment会保留原本基于MyAwesomeFeature的实验性提交,同时整体结构同步到最新master。
注意:如果分支已推送到远程仓库,变基后需用
git push --force-with-lease推送更新(仅推荐在私有分支或团队知情场景下操作)。
问题2:重新基于master创建分支并提取MyExperiment独有的更改
完全可以这样操作,适合需要清理分支历史、基于最新master重构分支的场景:
步骤1:同步最新master
git checkout master git pull origin master
步骤2:重构MyAwesomeFeature分支
若需保留原分支作为备份,先重命名旧分支:
git branch -m MyAwesomeFeature MyAwesomeFeature_old
再基于最新master新建分支,并迁移原MyAwesomeFeature的提交:
git checkout -b MyAwesomeFeature master # 提取原分支的提交并迁移到新分支 git cherry-pick $(git log --format="%H" MyAwesomeFeature_old..master --reverse)
更简便的方式是直接对原
MyAwesomeFeature执行git rebase master,效果与重构分支一致,无需额外备份(除非你需要保留旧分支历史)。
步骤3:创建仅包含MyExperiment更改的新分支
先找出MyExperiment相对于原MyAwesomeFeature的独有提交:
# 获取这些提交的哈希列表 git log --format="%H" MyAwesomeFeature_old..MyExperiment --reverse
再基于最新master新建分支,并将独有提交迁移过来:
git checkout -b MyExperiment_clean master git cherry-pick <commit-hash-1> <commit-hash-2> ...
完成后MyExperiment_clean仅包含实验分支的新增更改,完全基于最新master。
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

