git cherry-pick:合并提交节点到其它分支,将指定的提交(commit)应用于其他分支。
例,代码仓库有如下两个分支master和feature分支。
a - b - c - d Master
\
e - f - g - h - i - j - k Dev
现在将提交 f (commit hash id)应用到master分支。
# 在Dev分支获取最近节点的HASHcommit值
$ git log --oneline
# 切换到 master 分支
$ git checkout master
# 执行 Cherry pick 操作
$ git cherry-pick f
上面的操作完成以后,代码库就变成了下面的样子。
a - b - c - d - f Master
\
e - f - g - h - i - j - k Dev
Cherry pick 支持的其它提交方式。
# 应用Dev分支最新提交
$ git cherry-pick Dev
# 应用多个提交: 合并g,i两个提交
$ git cherry-pick <HashG> <HashI>
# 应用 f - k 之间的提交,不包含F节点本身,注意f节点必须是k节点前的提交节点
$ git cherry-pick f..k
# 应用 f - k 之间的提交,包含F节点本身
$ git cherry-pick f^..k
需要注意的是执行git cherry-pick 后,只是将提交合并到本地,需要执行git push 指令,才会将合并commit提交到远程库。
报错处理。
如果在cherry-pick的时候出现类似以下错误提示,那可能是是对同一提交重复做cherry-pick引起的。
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:git commit --allow-empty
Otherwise, please use 'git cherry-pick --skip'
On branch auto-7940289-dev-0b41beba
Your branch is up to date with 'origin/auto-7940289-dev-0b41beba'.You are currently cherry-picking commit e924fd2.
(all conflicts fixed: run "git cherry-pick --continue")
(use "git cherry-pick --skip" to skip this patch)
(use "git cherry-pick --abort" to cancel the cherry-pick operation)
Error content分析:没有冲突输出,而是提示如果要提交则需要做空提交(git commit --allow-empty),说明这次cherry-pick的内容可能已经在这个分支上提交过了。
可以验证:1、查看这个哈希值所修改的文件 2、查看某个文件的修改log 3、有相同的提交注释
版权归原作者 叔子衿 所有, 如有侵权,请联系我们删除。