Git实用教程-第十四篇:Git工具之cherry-pick

合并代码,我们之前学过git merge命令,该命令是将当前分支的所有提交,都合并到目标分支上,有没有办法,选择性合并呢,我只想合并指定的几个提交?可以使用git cherry-pick 命令。

一、首先准备测试数据

创建两个分支,dev和test,开始时,两个分支的readme.txt文件是相同的,内容都是空的,提交记录都只有一个"init",如下图所示

image

然后切换到dev分支,添加两次提交,第一次,文件添加“第一次提交”,commit注释也相同;第二次,文件添加“第二次提交”,commit注释也相同,如下图所示

image

这时,test分支,还是只有“init”的提交记录。

二、迁移指定提交

将“第一次提交”的这个commit迁移到test分支,首先使用git log查看该提交的commit_id,为3769ca4bb5824(具体值,你的和我的可能不一样)。

然后切换到test分支,使用git cherry-pick命令迁移commit,如下图

image

然后查看test分支的日志,发现只有指定的commit迁移过来了,如下图

image

:由于commit_id是全局唯一的,所以只要知道commit_id,可以将该commit迁移到任意分支,只需要先切换到指定分支,然后使用cherry-pick命令即可。

三、迁移多个分支
1、迁移不连续的多个分支

git cherry-pick  

上面命令,将commit_id_1和commit_id_2迁移到当前分支,不同的commit_id用空格隔开,注意commit_id的顺序,按照提交顺序排列,越早提交的放在越前面。

2、迁移连续的多个分支(commit_id_1, commit_id_2] : 不包含commit_id_1

git cherry-pick ..

上面命令,是将commit_id_1(不含本身)和commit_id_2(含本身)之间的所有提交迁移到当前分支。类似前一条命令,也要注意顺序。

3、迁移连续的多个分支[commit_id_1, commit_id_2] : 包含commit_id_1

git cherry-pick ^..

四、配置项
1、-n,--no-commit
只更新工作区和暂存区,不产生新的提交。

2、-x
在提交信息的末尾追加一行(cherry picked from commit ),方便以后查到这个提交是如何产生的。

3、-s,--signoff
在提交信息的末尾追加一行操作者的签名(Signed-off-by: <作者>),表示是谁进行了这个操作。


小结
1、将指定commit合并到当前分支

$ git cherry-pick 

2、迁移不连续的多个分支

$ git cherry-pick  

3、迁移连续的多个分支(commit_id_1, commit_id_2] : 不包含commit_id_1

$ git cherry-pick ..

4、迁移连续的多个分支[commit_id_1, commit_id_2] : 包含commit_id_1

$ git cherry-pick ^..



注意
迁移多个提交时,一定要注意提交的顺序,按提交时间先后排列,否则提交时可能会有冲突,若有冲突,可以根据提示,选择继续还是回滚。

你可能感兴趣的:(Git实用教程-第十四篇:Git工具之cherry-pick)