Git:合并提交节点到其它分支的详细操作[git cherry-pick]

git cherry-pick:合并提交节点到其它分支,将指定的提交(commit)应用于其他分支。

例,代码仓库有如下两个分支masterfeature分支。

    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  

# 应用 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、有相同的提交注释
 

你可能感兴趣的:(GIT/SVN,git)