git cherry-pick 的使用 — 跨分支转移代码

需求: 将代码从一个分支转移到另一个分支

情况一:提交另一个分支的所有代码变动,采用合并 (git merge)
情况二:你只需要部分代码变动(某几个提交),这时可以采用 git cherry-pickgit rebase --onto

其中 git rebase --onto 更适用于提交一系列相连的commits, git cherry-pick 更适用于提交一个或较少的几个commit

一、基本用法

首先切换到想要提交变动的分支: 如 git checkout master

$ git cherry-pick <commitHash>
$ git cherry-pick <HashA> <HashB> // 应用A到B两个提交
$ git cherry-pick A..B // 
$ git cherry-pick A^..B 

二、配置项

(1)-e,–edit

打开外部编辑器,编辑提交信息。

(2)-n,–no-commit

只更新工作区和暂存区,不产生新的提交。

(3)-x

在提交信息的末尾追加一行(cherry picked from commit …),方便以后查到这个提交是如何产生的。

(4)-s,–signoff

在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。

(5)-m parent-number,–mainline parent-number

如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。

-m配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。

$ git cherry-pick -m 1 <commitHash>

上面命令表示,Cherry pick 采用提交commitHash来自编号1的父分支的变动。

一般来说,1号父分支是接受变动的分支(the branch being merged into),2号父分支是作为变动来源的分支(the branch being merged from)。

三、代码冲突

如果操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作。

(1)–continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。

$ git cherry-pick --continue

(2)–abort
发生代码冲突后,放弃合并,回到操作前的样子。

(3)–quit
发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。

四、转移到另一个代码库

详见参考链接

git cherry-pick 教程 — 阮一峰的网络日志
git rebase --onto参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值