这里有两个不同的git分支。一个分支正在进行开发(Branch1)。
另一个分支正在进行一些概念验证工作(Branch2)。现在,我想从Branch1中挑选变更,使Branch2保持最新状态。
现在,在挑选了4或5个变更后,我遇到了一些合并冲突,并且无法继续进行其他挑选。
那么,我需要在进行下一个挑选之前解决所有冲突吗?还是我可以推迟冲突解决,直到将所有变更都挑选完毕(然后一次性解决所有冲突)?
此外,在这种情况下,建议使用cherry-pick还是分支合并?
这里有两个不同的git分支。一个分支正在进行开发(Branch1)。
另一个分支正在进行一些概念验证工作(Branch2)。现在,我想从Branch1中挑选变更,使Branch2保持最新状态。
现在,在挑选了4或5个变更后,我遇到了一些合并冲突,并且无法继续进行其他挑选。
那么,我需要在进行下一个挑选之前解决所有冲突吗?还是我可以推迟冲突解决,直到将所有变更都挑选完毕(然后一次性解决所有冲突)?
此外,在这种情况下,建议使用cherry-pick还是分支合并?
继续之前:
安装适当的合并工具。在Linux上,我强烈建议您使用meld:
sudo apt-get install meld
配置您的合并工具:
git config --global merge.tool meld
然后,按以下方式迭代:
git cherry-pick ....
git mergetool
git cherry-pick --continue
在进行下一次 cherry-pick 前,我需要解决所有冲突吗?
是的,至少在标准 git 设置下是这样。当存在冲突时,您不能 cherry-pick。
此外,通常情况下,冲突越多,解决起来就越困难,因此最好逐个解决它们。
话虽如此,您可以一次 cherry-pick 多个提交,这将实现您所要求的内容。例如,参见如何 cherry-pick 多个提交。如果一些提交撤销了先前的提交,则这很有用。然后,您将希望一次性 cherry-pick 所有提交,这样您就不必为稍后的提交所否定的更改解决冲突。
此外,在这种情况下建议使用 cherry-pick 还是分支合并?
通常,如果您想使特性分支保持与主开发同步,只需将 master -> 特性分支合并即可。其主要优点是稍后将特性分支 -> 主分支合并会更加轻松。
只有在必须从主分支中排除某些更改的情况下,cherry-picking 才会有用。不过,这仍然很痛苦,因此我建议尽量避免使用。
git
无法做到这一点是故意设计的选择吗(如果是的话,你知道为什么吗?),还是只是一些意外的笨拙之处? - LSpice除此之外,补充一下@claudio所说的,当使用cherry-pick时,你也可以使用合并策略。
因此,你可以像这样使用 git cherry-pick --strategy=recursive -X theirs commit
或者 git cherry-pick --strategy=recursive -X ours commit