在日常的工作中,一般稍微正规点的公司都会遵守
git flow
的。对应不同功能的需求,都会建立新的分支进行开发。完成开发并测试没有问题之后,才提出pr
请求@
对应核心开发,最后才会合入主干分支。
1. 引入原因
请问,你的梦想是什么?
当我们发现程序中存在 Bug
的时候,在对应分支进行了修改,但是发现这个问题其实每个分支都存在,这个时候就需要使用到 cherry-pick
这个功能了。
顾名思义,cherry-pick
直意为“摘樱桃”,有精心挑选的含义,挑选一个我们需要合入的 commit
名称。它可以用于将在其他分支上的 commit
修改,移植到当前的分支。
一个很常见的场景,就是想在某个稳定版本上,添加一个刚开发完成的版本中的功能。就可以使用 cherry-pick
命令,将这个功能相关的 commit
提取出来,合入稳定版本的分支上。
2. 使用方式
现在,可以开始你的表演。
- 简单操作
当执行完 cherry-pick
之后,将会自动生成一个新的 commit
进行提交,也就是会有一个新的 commit id
。如果顺利的话,就可以正常提交了;如果遇到冲突,使用 git diff
解决冲突即可。工作中,不推荐手工解决冲突,最好还是使用一些 diff
工具来处理,毕竟手工处理容易出错。
# 对当前分支进行操作
$ git cherry-pick <commit-id>
# 保留原提交的作者信息进行提交
$ git cherry-pick -x <commit-id>
一般使用 Git
管理工具,可以很方便的查找到对应的 commit
信息和使用 cherry-pick
方法。我日常中一般使用 VScode
和 Pycharm
都是有对应的 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
的先后顺序来处理,否者会有意想不到的问题。如果遇上冲突,最好不要手工解决冲突,还是需要依赖工具来完成的。