问题 如何在git中将我的功能分支重新绑定到开发分支,尽可能少冲突?


我的功能分支已超过30或更多提交。与此同时,在开发分支中,其他开发人员也没有推出其他功能。因此,每次在开发时发布新功能时,我都会被要求:

  1. Rebase开发分支到我的功能分支
  2. 解决冲突(如果有的话)
  3. 继续在功能分支中进行开发

问题

第二步是这里的鸡脖子。在重新定位时,它给了我冲突 一切 提交该分支。这实际上是迭代和冗余的。注意,我不能总是立即修改开发分支,因为我在分支中的工作仍在进行中。

我尝试了什么?

  1. squash 并尽可能地减少我的提交(但这有助于最少,因为大多数时候没有什么可以压扁)
  2. stash 我正在进行改变,并重新开发然后解除我的变化。 (但在这里,我也会遇到冲突)
  3. 运用 -preserve-merges 与rebase。 (但是这里的每个人都喊道,完全使用它 灰心

那么,当功能分支本身有很多提交时,处理功能分支上的变形开发到最少冲突的最佳方法是什么。我是一个更新鲜的人,所以回复一个有用的解释(或链接)将有助于继续。


4154
2017-08-23 03:59


起源



答案:


工作流程是健全的(rebase)。
但冲突不应该一次又一次地解决。

为此,你有 git rerere:激活它(git config --global rerere.enabled true),最后一次解决冲突(或做一个 手动重新培训, 要么 使用 contrib/rerere-train.sh),你的下一个rebase将在你的下一个rebase重新使用这些冲突解决方案。


7
2017-08-23 05:26



哇从来没有听说过rerere ..请试试这个肯定...谢谢 - Karan Desai
@KaranDesai再次如我所说,你可以重新训练rerere,以避免(再次)解决你的合并冲突。再培训完成后,您可以再次尝试使用rebase:不应再有任何冲突(在过去的提交中) - VonC


答案:


工作流程是健全的(rebase)。
但冲突不应该一次又一次地解决。

为此,你有 git rerere:激活它(git config --global rerere.enabled true),最后一次解决冲突(或做一个 手动重新培训, 要么 使用 contrib/rerere-train.sh),你的下一个rebase将在你的下一个rebase重新使用这些冲突解决方案。


7
2017-08-23 05:26



哇从来没有听说过rerere ..请试试这个肯定...谢谢 - Karan Desai
@KaranDesai再次如我所说,你可以重新训练rerere,以避免(再次)解决你的合并冲突。再培训完成后,您可以再次尝试使用rebase:不应再有任何冲突(在过去的提交中) - VonC


我建议 保持你的功能小 (一两天),你的功能分支也会很小。 另一种方法是,不是每次将某些东西推到开发分支时,而是仅在有时,或仅在合并之前一次。 同样,您需要保持较小的功能,否则您将同时拥有太多冲突。

关于您的问题,您不能最小化rebase中的冲突数量。如果存在冲突,则无法避免。

但git有一种方法可以帮助你:我建议你启用 rerere 这代表 重用录制的分辨率。有了这个,git会记录您如何解决冲突,并在下次出现冲突时重新应用解决方案,以便您找到已解决的冲突。这样可以加快您的工作流程。

您可以使用全局启用rerere

git config --global rerere.enabled true

3
2017-08-23 05:28



Woah rerere并不罕见,这意味着(只有我不知道)。同样的建议也在之前的回答中。 +1用于添加语法以全局启用它。请务必尝试 - Karan Desai


尝试 git merge 在执行之前从开发分支进入功能分支 git rebase。它会提供更多信息。


0
2017-09-03 08:44