当我git rebase branch1
branch1-local
时,我会发生冲突。我解决了冲突,做git add <conflicted-add>
然后做git rebase --continue
,因为git要求我这样做。之后,将应用新的提交。出现了新的冲突。但是再次发生同样的冲突!同一个文件!我再次执行此操作,git add
,git rebase --continue
,然后再次重复此操作,直到我为每个重新提交的提交重复此操作。
为什么rebase让我一遍又一遍地重做相同的冲突解决方案?
答案 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。