为什么我要一遍又一遍地解决同样的冲突?

时间:2012-12-11 17:10:32

标签: git version-control git-rebase

当我git rebase branch1 branch1-local时,我会发生冲突。我解决了冲突,做git add <conflicted-add>然后做git rebase --continue,因为git要求我这样做。之后,将应用新的提交。出现了新的冲突。但是再次发生同样的冲突!同一个文件!我再次执行此操作,git addgit rebase --continue,然后再次重复此操作,直到我为每个重新提交的提交重复此操作。

为什么rebase让我一遍又一遍地重做相同的冲突解决方案?

2 个答案:

答案 0 :(得分:12)

您想要的是git rerere,它会为您记录冲突解决方案。我见过的最好的介绍现在是Git Book, Tools chapter的一部分。在实践中,当您执行rebase时,您将最终停止,但您只需检查合并冲突是否仍然已解决,然后git add并继续。

答案 1 :(得分:3)

你不应该一遍又一遍地得到同样的冲突。 Rerere在这里不会帮助你。这只是意味着您尝试重播提交的代码库是如此不同,以至于每次提交都需要您的帮助来调整它。这是支持合并而不是rebase的原因之一。只有在必要时才应使用Rebase,而不是常规工作流程的一部分。 Rerere将在合并/重置类型工作流程中提供更多帮助。以下是我的工作流程,可避免变基:http://dymitruk.com/blog/2012/02/05/branch-per-feature/

缓解一些痛苦的一种方法是使用Beyond Compare等智能合并程序。它具有语法意识,可以解决Git(正当地)拒绝为您做的一些冲突。很多时候,这些工具在被调用时甚至不会打开他们的UI,解决问题并允许你的git mergetool命令继续下一次冲突。请记住将“trust mergetool退出代码”设置为true。