在进行大合并掌握之前,如何在长期功能分支上工作时不断解决冲突?

时间:2014-09-05 13:42:23

标签: git merge

我已经从master创建了一个功能分支,我已经在这个分支上工作了一个多月。我还没有将它合并回master,但我已经进行了试验合并,并且有很多冲突需要解决。我担心越多的冲突会越多,我在分支机构工作的时间就会越来越多,并为我做更多工作,试图记住在解决冲突时我可能暂时没有触及过的部分代码。

我的默认策略是继续处理分支,直到它完成,然后将其合并到master,然后处理所有冲突。但我担心的是,我等待的时间越长,合并就越痛苦。

我使用什么策略来最小化最终合并时的冲突解决方案,或者至少只处理最近的冲突。

3 个答案:

答案 0 :(得分:4)

定期将master合并到功能分支(git merge master)中,或者,如果您不想进行合并提交,请在master({{}}之上重新分支您的分支。 1}})。

重新定位会重写您的分支的历史记录,这可能是您想要的(也可能不是您想要的)(尽管保留了作者和原始日期)。

如果您选择定期合并,最终可能会遇到无法解决任何问题的合并提交,而且只是混乱。您可以通过执行"dry run" of git merge

来防止这种情况发生
git rebase master

如果没有冲突,这将告诉你

git merge --no-ff --no-commit

因此您可以执行Automatic merge went well; stopped before committing as requested 以防止创建虚假合并提交。 (获得相同行为的另一种不太自动的方法是键入git merge --abort,然后如果立即获得编辑器屏幕,请将提交消息留空以取消提交。但这很容易出错。)< / p>

答案 1 :(得分:4)

定期将master合并到您的功能分支中,或者在master之上重新定位功能分支,这是一个很好的答案。

另一种选择是启用rerere,以便reuse the recorded resolution

  

在许多情况下,此功能可能非常方便。文档中提到的一个示例是,如果要确保长期存在的主题分支将干净地合并但不希望有一堆中间合并提交。启用rerere后,您可以偶尔合并,解决冲突,然后退出合并。如果你连续这样做,那么最后的合并应该很容易,因为rerere可以自动为你做所有事情。

启用rerere执行git config rerere.enabled true。我通常添加--global标志,因此它适用于我机器上的所有存储库。

答案 2 :(得分:-2)

试试这个:

使用git rebase并使用3向合并工具来解决突然出现的冲突,大部分时间是自动解决的。因为事情会自动合并,所以更准确。

这对我来说是最痛苦的方式。 git merge 很多更加痛苦,因为它会产生很多冲突,3路合并工具会丢失并将它们全部抛给你。

- 基于实际经验和审判了大约25项与主人不同的承诺。我用rebase手动解决了1个单一冲突,这是一个空白行,另一个冲突自动解决了git mergetool。使用git merge我查看了8个文件,试图记住我所做的事情,在此过程中犯了一些错误。