63

有两个不同的 git 分支。在一个开发中(Branch1)。

在其他分支中,一些 PoC 工作正在进行(Branch2)。现在,我想挑选从 Branch1 到 Branch2 的更改,以便 Branch2 是最新的。

现在,在挑选 4 或 5 个更改之后,我遇到了一些合并冲突,我无法继续进行进一步的挑选。

是否,我需要在进行下一个樱桃挑选之前解决所有冲突,或者我可以以某种方式推迟冲突解决,直到我挑选所有更改(并一起解决所有冲突)?

此外,在这种情况下是否建议进行樱桃挑选或分支合并?

4

3 回答 3

72

在继续之前:

  • 安装适当的合并工具。在 Linux 上,我强烈建议你使用 meld:

    sudo apt-get install meld
    
  • 配置您的合并工具:

    git config --global merge.tool meld
    

然后,按以下方式迭代:

git cherry-pick ....
git mergetool
git cherry-pick --continue
于 2013-11-07T07:51:51.333 回答
43

做,我需要解决所有的冲突,然后再继续下一个樱桃 -pick

是的,至少使用标准的 git 设置。有冲突时你不能挑剔。

此外,一般来说,你拥有的越多,冲突就越难解决,因此通常最好一个一个地解决它们。

也就是说,您可以一次挑选多个提交,这将满足您的要求。参见例如How to cherry-pick multiple commits。例如,如果某些提交撤消了早期的提交,这将很有用。然后,您会想一口气挑选所有内容,这样您就不必为以后的提交撤消的更改解决冲突。

此外,在这种情况下是否建议进行樱桃挑选或分支合并?

一般来说,如果你想让一个特性分支与主开发保持同步,你只需合并 master -> feature 分支。主要优点是稍后合并功能分支-> 主将少得多痛苦。

仅当您必须从功能分支中排除 master 中的某些更改时,Cherry-picking 才有用。不过,这会很痛苦,所以我会尽量避免它。

于 2013-11-07T09:44:09.810 回答
9

另外,要完成@claudio 所说的,在挑选樱桃时,您还可以使用 merging strategy

所以你可以这样git cherry-pick --strategy=recursive -X theirs commitgit cherry-pick --strategy=recursive -X ours commit

于 2019-06-11T15:50:10.673 回答