如何在Git中将我的功能分支与开发分支进行变基,以尽可能减少冲突?

11
我有一个功能分支,其中包含了大约30个以上的提交。与此同时,在开发分支中其他开发人员已经推送了一些其他功能。因此,每当在开发分支上发布一个新功能时,我都会被要求:
  1. 把开发分支rebase到我的特性分支上
  2. 如果有冲突,则解决冲突
  3. 继续在您的特性分支上进行开发
问题: 这里的关键是第二步。在rebase时,它给我每个提交都产生了冲突。这真的很反复和冗余。请注意,由于我的分支还在进行中,我不能立即重新定义开发分支。 我试过什么?
  1. 尽可能压缩并减少我的提交(但这最少有用,因为大多数时候没有什么可以压缩)
  2. 将我的正在进行中的更改stash,然后rebase开发分支,然后取消stash我的更改。(但是在这里,我也遇到了冲突)
  3. 使用-rebase保留合并。 (但是在这里,所有人都大喊着不鼓励使用)
那么,当特性分支本身具有众多提交时,处理将开发分支rebase到特性分支中的最佳方法是什么?请帮助并解释一下(或链接)。
3个回答

7

这个工作流是合理的(rebase)
但是每次解决冲突都不应该一遍又一遍地进行。

为此,您可以使用git rerere:激活它(git config --global rerere.enabled true),最后一次解决冲突(或进行手动重新训练,或者使用contrib/rerere-train.sh),然后下一次rebase将重复使用那些冲突解决方案。


哇,从未听说过rerere..一定会试一试...谢谢 - Karan Desai
1
@KaranDesai 再次提到,您可以重新训练 rerere 以避免再次解决合并冲突。一旦重新训练完成,您可以尝试再次变基:过去的提交不应该再有任何冲突。 - VonC

3
我建议你保持功能小(一两天),这样你的分支也会很小。另一种方法是不必每次推送到开发分支时都进行变基,只在合并之前或偶尔进行变基。再次强调,你需要保持功能小,否则你将同时面临太多冲突。
关于你的问题,你无法减少变基中的冲突数量。如果有冲突,你无法避免它们。
但是 Git 有一种方式可以帮助你: 我建议你启用 rerere,它代表“重用记录的解决方案”。使用它,Git 记录了你如何解决冲突,下次出现相同的冲突时,解决方案将被重新应用,你会发现冲突已经被解决。这可以加速你的工作流程。
你可以通过以下命令全局启用 rerere:
git config --global rerere.enabled true

哇,rerere并不罕见,这意味着(只有我不知道)。之前的回答中也有同样的建议。+1为了全局启用它添加语法。我一定会尝试的。 - Karan Desai

0
尝试在执行git rebase之前,从开发分支合并到特性分支。这样做会更加详细。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接