命令使用场景
很多情况下,我们需要将分支的代码进行转移到其他分支。一般我们会使用merge命令,进行分支合并,但是这样会产生很多无用的提交记录,使分支显得错综复杂。git cherry-pick命令就可以避免这个问题。
命令简介
git cherry-pick <commitHash>
这个命令就会将特定Hash的提交应用到当前分支。
该命令不仅可以使用commitHash,也可以使用分支名。git cherry-pick branch-name
其实也很容易理解,因为分支本质上就是一个指针,指向一次具体的commit,即分支本质存储的是一个commitHash。
在sourcetree上,cherry-pick称为遴选。
命令进阶
可以一次性遴选多个提交
git cherry-pick <hashA> <hashB>
可以一次性转移连续提交
要点
- hashA和hashB之间要存在线性连续关系,并且HashA要在HashB之前。
如果hashA在hashB之后,cherry-pick会报错。
- 这种写法包后不包前,也就是hashA不会被包含。如果要包含hashA,需要加一个
^
.
题外话
关于第一点,我想说的就是
当绿色分支和红色分支合并的时候,绿色分支上的提交也会在红色分支的提交历史上。所以绿色提交跟红色提交仍是线性关系。
命令的额外参数
—continue
如果命令导致冲突,当手动解决冲突过后,第一步将修改的文件重新加入暂存区,第二步使用下面命令继续cherry-pick的进行。git cherry-pick --continue
—abort
cherry-pick冲突后,终止cherry-pick的执行。这时会回到cherry-pick前的状态。git cherry-pick --abort
—quit
cherry-pick冲突之后退出cherry-pick但是回不到操作前的样子。git cherry-pick --quit