Git合并特定commits 到另一个分支

经常被问到如何从一个分支合并特定的commits到另一个分支。有时候你需要这样做,只合并你需要的那些commits,不需要的commits就不合并进去了。

  • 合并某个分支上的单个commit

首先,用git log或GitX工具查看一下你想选择哪些commits进行合并,例如:

dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master]

           \

            76cada - 62ecb3 - b886a0 [feature]

比如,feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改,或其他人想访问的内容。无论什么原因,你现在只需要将62ecb3 合并到master,而不合并feature上的其他commits,所以我们用git cherry-pick命令来做:

git checkout master
git cherry-pick 62ecb3

这样就好啦。现在62ecb3 就被合并到master分支,并在master中添加了commit(作为一个新的commit)。cherry-pick merge比较类似,如果git不能合并代码改动(比如遇到合并冲突),git需要你自己来解决冲突并手动添加commit。

  • 合并某个分支上的一系列commits

在一些特性情况下,合并单个commit并不够,你需要合并一系列相连的commits。这种情况下就不要选择cherry-pick了,rebase 更适合。还以上例为例,假设你需要合并feature分支的commit76cada ~62ecb3 到master分支。

首先需要基于feature创建一个新的分支,并指明新分支的最后一个commit:

git checkout -b newbranch 62ecb3

然后,rebase这个新分支的commit到master(--ontomaster)。76cada^ 指明你想从哪个特定的commit开始。

git rebase --onto master 76cada^
得到的结果就是feature分支的commit 76cada   ~ 62ecb3  都被合并到了master分支。



[英文原文] https://ariejan.net/2010/06/10/cherry-picking-specific-commits-from-another-branch/

### 如何将一个 Git 分支Commit 合并一个分支 #### 使用命令行工具完成合并操作 当需要将一个分支上的特定提交(commit)合并分支时,可以采用以下方法: 对于想要合并的具体commit ID(db81b3e),可以在目标分支执行`cherry-pick`命令来应用该次更改[^1]。 ```bash git checkout target_branch_name # 切换到接收变更的目标分支 git cherry-pick db81b3e # 应用来自源分支的指定commit ``` 一种方式是在获取最新的分支列表后,先切换到要合并入的分支再做进一步的操作[^2]。 ```bash git branch -a # 查看所有本地和远程分支 git checkout source_branch # 切换到含有待合并commit的原分支 git rebase interactive HEAD~n # n代表最近几次提交中的某一次作为起点进入交互模式挑选commit # 按照提示选择要挑出(cherry pick)的commits,保存退出编辑器 git checkout target_branch # 返回目标分支准备接受新的改动 git merge --ff-only temp # 尝试快速前进步骤整合临时创建用于收集选中commits的新分支temp(需事先checkout出来) git branch -d temp # 清理不再需要的辅助分支 ``` #### 借助IDEA图形界面简化流程 除了命令行外,也可以利用集成开发环境(IntelliJ IDEA)来进行更直观便捷的操作。具体做法如下所示[^3]: 1. 在IDEA内通过VCS菜单或快捷键组合(`Ctrl+Shift+A`)打开版本控制系统相关功能; 2. 导航至Git选项下的日志视图(Log),这里展示了当前仓库的历史记录; 3. 找到希望引入其变化的那个分支名称旁边对应的按钮点击展开更多选项; 4. 多选那些计划同步过来的提交项,右键选取“Cherry Pick”,随后按照指示完成剩余步骤直至成功推送更新后的代码库副本给服务器端。 无论采取哪种途径都应当留意可能出现的文件冲突状况,并及时妥善处理以保障项目的稳定性和一致性。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值