如何将feat1分支的提交合并到master,且不引入dev-test分支内容?
解决方案:重构feat1分支历史后合并到master
最优方案:使用git rebase --onto转移提交
这个方法能直接把feat1中仅属于新功能的f1、f2提交,从dev-test分支的基点转移到master分支上,彻底剥离dev-test的环境适配修改(d1、dn),且完整保留feat1的提交历史。
步骤如下:
- 拉取最新代码,确保本地分支同步远程仓库:
git checkout master git pull origin master git checkout feat1 git pull origin feat1
- 执行rebase,将feat1的提交重定向到master:
git rebase --onto master dev-test feat1
命令解释:
--onto master指定新的基点是master分支;dev-test是原基点,即只处理feat1中在dev-test之后的提交(也就是你的f1、f2);最后feat1是目标分支。
- 处理冲突(若有):
如果rebase过程中出现代码冲突,先手动解决冲突,然后执行:
git add . git rebase --continue
若想终止操作,执行git rebase --abort即可回到操作前状态。
- 合并到master并推送:
现在feat1分支已经完全基于master,且仅包含f1、f2提交,直接合并即可:
git checkout master git merge feat1 git push origin master
安全提示
如果不想修改原feat1分支的历史,可以先创建备份分支:
git checkout feat1 git branch feat1-backup
之后再对feat1执行rebase操作,原分支会被保留。
备选方案:精准cherry-pick提交
如果不想修改分支历史,也可以用cherry-pick单独挑选f1、f2提交到master,但需要确保选中所有目标提交:
- 找出feat1中仅属于新功能的提交(排除dev-test的修改):
git log --oneline feat1 ^dev-test
这个命令会列出feat1里所有不在dev-test中的提交,也就是你要的f1、f2,复制它们的提交哈希值。
- 切换到master分支,执行cherry-pick:
git checkout master git cherry-pick <f1的哈希值> <f2的哈希值>
- 处理冲突(若有):解决后执行
git add . && git cherry-pick --continue,终止则用git cherry-pick --abort。
注意:如果feat1的提交之间存在依赖关系,必须按提交顺序执行cherry-pick;若后续feat1有新提交,重复此操作容易遗漏,因此更推荐第一种rebase方案。
内容的提问来源于stack exchange,提问作者jolmos
相关产品推荐
相关产品推荐

