我用Git摘樱桃


在日常的工作中,一般稍微正规点的公司都会遵守git flow的。对应不同功能的需求,都会建立新的分支进行开发。完成开发并测试没有问题之后,才提出 pr 请求 @对应核心开发,最后才会合入主干分支。

我用Git摘樱桃


1. 引入原因

请问,你的梦想是什么?

当我们发现程序中存在 Bug 的时候,在对应分支进行了修改,但是发现这个问题其实每个分支都存在,这个时候就需要使用到 cherry-pick 这个功能了。

顾名思义,cherry-pick 直意为“摘樱桃”,有精心挑选的含义,挑选一个我们需要合入的 commit名称。它可以用于将在其他分支上的 commit 修改,移植到当前的分支。

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

我用Git摘樱桃


2. 使用方式

现在,可以开始你的表演。

  • 简单操作

当执行完 cherry-pick 之后,将会自动生成一个新的 commit 进行提交,也就是会有一个新的 commit id。如果顺利的话,就可以正常提交了;如果遇到冲突,使用 git diff 解决冲突即可。工作中,不推荐手工解决冲突,最好还是使用一些 diff 工具来处理,毕竟手工处理容易出错。

# 对当前分支进行操作
$ git cherry-pick <commit-id>

# 保留原提交的作者信息进行提交
$ git cherry-pick -x <commit-id>

一般使用 Git 管理工具,可以很方便的查找到对应的 commit 信息和使用 cherry-pick 方法。我日常中一般使用 VScodePycharm 都是有对应的 git 插件的,很方便就会使用了,当然我还是 Vim 党。

  • 高级技巧

正常来说,我们直接使用最简单的命令就可以了。及时我们希望使用多个 commit 的话 ,无非就是多重复执行几次而已,但是 cherry-pick 还有一些高级点的用法,可以很方便的让我们使用。

# 这个一个 (左开,右闭] 的区间
$ git cherry_pick <start-commit-id><end-commit-id>

# 这个一个 [左开,右闭] 的区间
$ git cherry-pick <start-commit-id>^...<end-commit-id>

举个栗子:

# 默认commit的前六位就可以了
git cherry-pick 371c2…971209
git cherry-pick 371c2^…971209

3. 注意事项

还是,洗洗睡吧!

无论是对单个 commit 进行 cherry-pick ,还是批量处理,注意一定要根据时间线,依照 commit 的先后顺序来处理,否者会有意想不到的问题。如果遇上冲突,最好不要手工解决冲突,还是需要依赖工具来完成的。


文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录