【cherry pick】如何 merge 被 revert 的代码

246 阅读1分钟

背景

昨天提pr,原本是想把 featureBranch 的代码合进 releaseBranch,不小心合进了 master,于是 revert 这次合并。接下来我想重新操作将代码合并到 releaseBranch,但是合并不进去了

iOAXMMhI9N.jpg 后来我去 stackoverflow 上搜了下,试了被人的做法,并没有生效,后来问了老大,用 cherry pick 完成了这次合并。

问题分析

本质原因是 revert 记住了上次提交代码的 hash,导致后面我再次提交合并时,git 对比发现还是原来的那次提交,所以 feature code 又被忽略了

问题解决

建立新分支,重新建立一次提交,需要产生一个新的 commit hash

建立新的提交我们可以用 cherry pick,可以快速将代码从一个分支转移到另一个分支

然后我们用新的分支 merge 进 release 分支,这样就 ok 啦

cherry pick

cherry pick 翻译过来是摘樱桃,就是从别的枝丫上摘取我们需要的樱桃(code),很形象对吧

image.png

$ git cherry-pick <commitHash>

上面命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。

举例来说,代码仓库有featurefeatureNewHash两个分支。

    a - b - c  feature
         
    a - b      featureNewHash

现在要将 c 应用到 featureNewHash

# 切换到 featureNewHash 分支
$ git checkout featureNewHash

# Cherry pick 操作
$ git cherry-pick c

上面的操作完成以后,代码库就变成了下面的样子

    a - b - c  feature
         
    a - b - c  featureNewHash

上面代码表示将feature分支的最近一次提交,转移到当前分支。此时featureNewHashfeature的代码相同,但是 commitHash 不一样的