git只合并某⼀个分⽀的某个commit(转)
⼀、基本⽤法
git cherry-pick命令的作⽤,就是将指定的提交(commit)应⽤于其他分⽀。
$ git cherry-pick <commitHash>
上⾯命令就会将指定的提交commitHash,应⽤于当前分⽀。这会在当前分⽀产⽣⼀个新的提交,当然它们的哈希值会不⼀样。
举例来说,代码仓库有master和feature两个分⽀。
a -
b -
c -
d Master
\
e -
f -
g Feature
现在将提交f应⽤到master分⽀。
# 切换到 master 分⽀
$ git checkout master
# Cherry pick 操作
$ git cherry-pick fgit常用指令
上⾯的操作完成以后,代码库就变成了下⾯的样⼦。
a -
b -
c -
d - f Master
\
e -
f -
g Feature
从上⾯可以看到,master分⽀的末尾增加了⼀个提交f。
git cherry-pick命令的参数,不⼀定是提交的哈希值,分⽀名也是可以的,表⽰转移该分⽀的最新提交。
$ git cherry-pick feature
上⾯代码表⽰将feature分⽀的最近⼀次提交,转移到当前分⽀。
⼆、转移多个提交
Cherry pick ⽀持⼀次转移多个提交。
$ git cherry-pick <HashA> <HashB>
上⾯的命令将 A 和 B 两个提交应⽤到当前分⽀。这会在当前分⽀⽣成两个对应的新提交。
如果想要转移⼀系列的连续提交,可以使⽤下⾯的简便语法。
$ git cherry-pick A..B
上⾯的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。注意,使⽤上⾯的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使⽤下⾯的语法。
$ git cherry-pick A^..B
三、配置项
git cherry-pick命令的常⽤配置项如下。
(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,但是不回到操作前的样⼦。
五、转移到另⼀个代码库
Cherry pick 也⽀持转移另⼀个代码库的提交,⽅法是先将该库加为远程仓库。
$ git remote add target git://gitUrl
上⾯命令添加了⼀个远程仓库target。
然后,将远程代码抓取到本地。
$ git fetch target
上⾯命令将远程代码仓库抓取到本地。
接着,检查⼀下要从远程仓库转移的提交,获取它的哈希值。
$ git log target/master
最后,使⽤git cherry-pick命令转移提交。
$ git cherry-pick <commitHash>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论