第八周_T- git cherry-pick

95 阅读2分钟

该说不说,本该在开发中最常用的命令,我却没有使用几次。实在是一言难尽

上次看到一个 Git 面试题,一个分支上有 10 个提交,我只想合并其中一个提交到正式分支?怎么做?

我第一反应就是 cherry-pick ;但苦于没有实践,只是知道理论。想到、做到、得到。每一个都是巨大鸿沟,所以我不并不敢轻视。

一次偶然的机会,项目上需要临时发版。前端妹子写了很多需求,但是只上一部分。这时,我突然想到这不就是一次很好的实验机会吗?而且这个命令操作本来就是一种 merge 。改动都是在本地,就算出了什么问题,也可以把本地的分支删了,再重新拉取。

说干就干。

  1. 先切换到妹子的分支 meizi_dev :
git log //查看具体需要合并的commit ID,并记录下来
  1. 切换到 dev 集成分支
git pull  //必须先这样做。好习惯总不会错
git cherry-pick commitId //先拉取一个过来试试
git status //查看变化:此时提示有一个 commit 需要 push。到这,我知道已经成功了
git push  //推送就完事

其他用法:

后面不使用 commitId,跟上分支名 feature:表示将feature分支的最近一次提交,转移到当前分支。

转移多个分支:

git cherry-pick

上面的命令将 A 和 B 两个提交应用到当前分支。这会在当前分支生成两个对应的新提交

如果想要转移一系列的连续提交,可以使用下面的简便语法:

git cherry-pick A..B 【上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。

注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中】

git cherry-pick A^..B 【会包含 A】


Git 博大精深,很多时候并没有使用好的界面化工具,只是开发工具上自带的功能,满足最基本的操作,但是比较差劲。而且有时候打开命令行都不知道命令改咋敲,都忘了。还得百度,找找小手册才行。

总之,好好学习 Git,准没错