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

时间:2017-08-23 03:59:21

标签: git rebase git-rebase git-merge-conflict git-commands

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

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

    第二步是这里的鸡脖子。在变基础上,它给了我那个分支的每次提交的冲突。这实际上是迭代和冗余的。注意,我不能总是立即修改开发分支,因为我在分支中的工作仍在进行中。

    我尝试了什么?

    1. squash并尽可能减少我的提交(但这有助于减少,因为大多数时候没有任何东西可以压制)
    2. stash我正在进行的更改,并重新开发然后解除我的更改。 (但在这里,我也会遇到冲突)
    3. -preserve-merges与rebase一起使用。 (但是这里的每个人都大声说使用它完全是气馁
    4. 因此,当功能分支本身有大量提交时,处理功能分支的变形问题的最佳方法是什么,冲突最少。我是一个更新鲜的人,所以回复一个有用的解释(或链接)将有助于继续。

3 个答案:

答案 0 :(得分:7)

工作流程合理(rebase) 但冲突不应该一次又一次地解决。

为此,您有git rerere:激活它(git config --global rerere.enabled true),最后一次解决冲突(或执行manual re-traininguse contrib/rerere-train.sh),以及下一个rebase将在你的下一个rebase中重新使用这些冲突解决方案。

答案 1 :(得分:3)

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

关于您的问题,您无法最大限度地减少rebase中的冲突数量。如果存在冲突,则无法避免。

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

您可以使用

全局启用rerere
git config --global rerere.enabled true

答案 2 :(得分:0)

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