Cherry-Pick | 一日一 Git

版权声明:git

本帐号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影全部。工具

未经容许,不得转载。3d

1、前言

在实际工做开发中,会遵循标准的 Git Work flow,对待不一样的功能,会切出不一样的分支进行 coding,因此,基于什么基准分支切出来的功能分支进行 coding,这是一个很重要的问题。版本控制

若是切错了基准分支,你会发现可能最终开发完成以后, merge 不回去了。或者须要将某个分支上的 commit 代码,移植到某个分支上面,就须要使用到 cherry-pick 这个 git 命令了。code

2、Git 的 Cherry-Pick

一、什么是 Cherry-Pick

cherry-pick 是 Git 版本控制工具中的一个命令,和 commit 、pull 同样,它只是一个命令。cdn

cherry-pick 和它的名称同样,精心挑选,挑选一个咱们须要的 commit 进行操做。它能够用于将在其余分支上的 commit 修改,移植到当前的分支。blog

一个很常见的场景,就是想在某个稳定版本上,添加一个刚开发完成的版本中的功能。就可使用 Cherry-pick 命令,将这个功能相关的 commit 提取出来,合入稳定版本的分支上。开发

二、如何使用 Cherry-Pick

Cherry-Pick 使用起来很是的简单:it

git cherry-pick <commit-id>io

这里操做的就是须要 cherry-pick 的 commit-id ,通常使用 Git 管理工具什么的,均可以很方便的查看到,否者的话,可使用 git log 命令,查找咱们须要的 commit-id。

当执行完 cherry-pick 以后,将会自动生成一个新的 commit 进行提交,也就是会有一个新的 commit ID。

若是顺利的话,就能够正常提交了。若是遇到冲突,使用 git diff 解决冲突便可,工做中,不推荐手工解决冲突,最好仍是使用一些 diff 工具来处理,毕竟手工处理容易出错。

三、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]

三、注意事项

不管是对单个 commit 进行 cherry-pick ,仍是批量处理,注意必定要根据时间线,依照 commit 的前后顺序来处理,否者会有意想不到的问题。

若是赶上冲突,最好不要手工解决冲突,仍是须要依赖工具来完成的,最简单的就是 Android Studio 中为咱们提供的一套简单的 git 管理根据,接下来,就让咱们看看在 Android Studio 中,如何使用 cherry-pick 吧。

3、AS 中的 Cherry-Pick

Android Studio 中,其实已经为开发者提供了很是成熟的 Version Control 工具,通常使用快捷键 alt+9 打开。

在 Version Control 窗口中,能够查看到全部的 commit log。

在这个窗口中,能够看到一个很是直观的 git log 的状况,固然这是一个 git 管理工具的必备的,没什么好说道的。

若是想对某一次 commit 进行 cherry-pick 操做的话,找到这个 commit ,点击右键。

选择 Cherry-Pick 便可,一个樱桃的 icon 。

顺利的话,没有冲突,就会出现一个 commit changes 的对话框,能够直接提交当前的操做,而且 commit message 已经帮咱们写好了,记录清楚是从那个 commit 进行的 cherry-pick 操做。

若是不那么顺利,碰见了冲突,就须要咱们来处理冲突了,AS 其实也提供了很是直观的处理冲突的 diff 工具,会先提示须要处理冲突。

这里能够点击 Accept Yous 或者 Accept Theirs 来标记是使用你的代码,仍是第三方合并过来的代码。固然既然有冲突,一般咱们须要 点击 merge 按钮,本身来解决冲突。

最终,将代码按咱们的预期 merge 以后,点击 Apply 便可完成合并,同时生成个 commit 进行提交。

公众号二维码.jpg
相关文章
相关标签/搜索