1、什么是 Cherry-Pick
cherry-pick 是 Git 版本控制工具中的一个命令,和 commit 、pull 一样,它只是一个命令。
cherry-pick 和它的名称一样,精心挑选,挑选一个我们需要的 commit 进行操作。它可以用于将在其他分支上的 commit 修改,移植到当前的分支。
一个很常见的场景,就是想在某个稳定版本上,添加一个刚开发完成的版本中的功能。就可以使用 Cherry-pick 命令,将这个功能相关的 commit 提取出来,合入稳定版本的分支上。
2、如何使用 Cherry-Pick
Cherry-Pick 使用起来非常的简单:
git cherry-pick <commit-id>
这里操作的就是需要 cherry-pick 的 commit-id ,一般使用 Git 管理工具什么的,都可以很方便的查看到,否者的话,可以使用 git log 命令,查找我们需要的 commit-id。
当执行完 cherry-pick 之后,将会自动生成一个新的 commit 进行提交,也就是会有一个新的 commit ID。
如果顺利的话,就可以正常提交了。如果遇到冲突,使用 git diff 解决冲突即可,工作中,不推荐手工解决冲突,最好还是使用一些 diff 工具来处理,毕竟手工处理容易出错。
3、Cherry-Pick 的高级用法
前面介绍的最简单的 git cherry-pick 只是最简单也是最常用的方法,正常来说,我们直接使用最简单的命令就可以了,如果 commit 多了,无非就是多重复执行几次而已,但是 cherry-pick 还有一些高级点的用法,这里了解一下。
git cherry-pick -x <commit_id>
增加 -x 参数,表示保留原提交的作者信息进行提交。
在 Git 1.7.2 版本开始,新增了支持批量 cherry-pick ,就是可以一次将一个连续的时间序列内的 commit ,设定一个开始和结束的 commit ,进行 cherry-pick 操作。
git cherry_pick <start-commit-id>…<end-commit-id>
可以看到,它的范围就是 start-commit-id 到 end-commit-id 之间所有的 commit,但是它这是一个 (左开,右闭] 的区间,也就是说,它将不会包含 start-commit-id 的 commit。
而如果想要包含 start-commit-id 的话,就需要使用 ^ 标记一下,就会变成一个 [左闭,右闭] 的区间,具体命令如下。
git cherry-pick <start-commit-id>^...<end-commit-id>
举个例子来说明一下:
使用 git log —pretty=oneline 来查看当前分支最近的提交,注意 git 命令中,对于 commit-id 的操作,都只需要使用前五位就可以了。
git cherry-pick 371c2…971209 // (2,5]
git cherry-pick 371c2^…971209 // [2,5]
3、注意事项
无论是对单个 commit 进行 cherry-pick ,还是批量处理,注意一定要根据时间线,依照 commit 的先后顺序来处理,否者会有意想不到的问题。
版权归原作者 薇远镖局 所有, 如有侵权,请联系我们删除。