[git] cherry pick 将某个分支的某次提交应用到当前分支
  xdpUYArHQCI7 2023年12月06日 28 0


功能:将某个分支的某次提交应用到当前分支

应用场景:

在合并分支时,是将源分支的所有内容都合并到目标分支上,有的时候我们可能只需要合并源分支的某次或某几次的提交,这个时候我们就需要使用到git的cherry-pick操作了。

在develop分支上开发出功能模块A,B,C,这时提出先上线功能模块A,B。

怎么办?一个办法就是,重新建一个分支,然后再把功能模块C回退,留下功能模块A,B。这种做法不是不行,但是有更好的办法,那就是git所提供的cherry-pick功能。

cherry-pick类似于一个定制化的merge,它可以把其它分支上的commit一个个摘下来,合并到当前分支。

举例

比如我现在有个文件a.c,我在develop分支完成了三个功能模块:feature A,feature B,feature C。如下图:

[git] cherry pick 将某个分支的某次提交应用到当前分支_应用场景


现在,只要feature A,feature B,我们现在用cherry-pick命令直接把feature A,feature B的提交合并到master分支里,如下操作:

[git] cherry pick 将某个分支的某次提交应用到当前分支_git_02


可以看到,功能模块feature A,feature B已经被合并到master分支里。请注意,合并到master分支里的提交哈希值发生了改变,与原来的不同。

可以看出,cherry-pick命令使用方法很简单,即:

git cherry-pick commitID

刚刚是一个个提交cherry-pick到master分支,但如果有100个commit要合并到master分支呢?总不能这样一个个操作吧?git一样帮你想到了,它提供了一个区间操作方法。具体来讲是这样的:

git cherry-pick commit1..commit100

但是要注意,这是一个左开右闭的操作,也就是说,commit1不会被合并到master分支,而commit100则会。这样的话上面的需求可以如下操作来实现:

[git] cherry pick 将某个分支的某次提交应用到当前分支_git_03


注意:上面讲到cherry-pick命令每拣选一个commit就会提交一次生成一个新的commit id。 如果我们想让每个commit 拣选后暂缓提交,等到所有commit都拣选完成后,自己手动commit,应该怎么办呢?答案是用-n 选项:

[git] cherry pick 将某个分支的某次提交应用到当前分支_功能模块_04

命令:

git checkout master    // 先切换分支
git cherry-pick featureA的commitID   // 合并featureA功能
git cherry-pick featureB的commitID   // 合并featureB功能

注:git cherry-pick 分支名
合并该分支上最新的一次提交记录



参考:
git 一个可以提高开发效率的命令:cherry-pick详解


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月06日 0

暂无评论

推荐阅读
xdpUYArHQCI7