在进行项目需求开发的过程中,一般情况下会从master分支单独拉一条分支出来进行开发,但是有时候因为排查问题、查看代码等一些原因需要频繁切换分支,结果开发时忘记切换回开发分支导致将代码提交到了其他分支。

比如有很多次,我将开发需求的代码都提交到了test分支,测试过程中因为本来也是使用test分支测试的,所以没有发现问题,但是最后上预发布环境的时候才发现开发分支缺少了代码,排查才发现提交错分支了,如果手动把这些更改的代码复制到开发分支,不仅效率低,而且容易出错。

不过还好发现了Git还有一个很好用的功能。

Cherry-Pick

git cherry-pick命令的作用,就是将指定的提交(commit)应用于当前分支。

git cherry-pick <commitHash>

比如现有master和feature两个分支,分支的提交记录如下所示:

CleanShot 2024-06-21 at 18.48.56@2x

假设字母越靠前的,提交时间越早,比如feature分支中的 f提交记录先于master分支中的 g提交记录。

现在需要将feature分支中的 f提交记录应用到master分支,则可以使用cherry-pick命令,命令执行后的效果如下:

CleanShot 2024-06-21 at 18.49.17@2x

可以看到master分支中 d提交记录后面多了一个 f的提交记录。

接下来将介绍如何使用命令行执行cherry-pick的方法,以及在IDEA中使用该功能的方法。

使用命令行执行Cherry-Pick

转移单个提交记录

1、切换到需要接收提交的分支(比如master分支)

git checkout master

2、执行cherry-pick命令

git cherry-pick b4c004ad

注:其中b4c004ad是 f提交记录对应的部分md5

3、查看当前分支的提交记录

git log

可以看到feature分支的 f提交记录出现在了当前的master分支中。

转移多个提交记录

cherry-pick也支持一次转移多个提交记录。

git cherry-pick <hashA> <hashB>

上面命令的功能就是将hashA和hashB两个提交记录应用到当前分支。

如果想要转移的提交记录是连续的,也可以使用以下的用法:

git cherry-pick hashA..hashD

上面的命令会将hashA和hashD以及中间的所有提交记录转移到当前分支。

使用IDEA执行Cherry-Pick

1、打开Git窗口

2、切换到需要接收提交的分支(在该例子中需要将test分支中的提交记录转移到feature分支,所以图中是切换到feature分支)

CleanShot 2024-06-21 at 15.42.44@2x

3、切换feature分支后,再单击test分支,在右边的窗口中选择需要转移的提交记录,按住command键(windows用户按住ctrl键)可多选,然后点击上面的樱桃图标。

CleanShot 2024-06-21 at 15.44.45@2x

上图中选择了a、b、c三个提交记录。

点击后切换到feature分支,可以看到test分支中的a、b、c三条提交记录被成功转移到feature分支。

CleanShot 2024-06-21 at 15.46.15@2x