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

lur*_*her 42 git version-control git-rebase

当我这样做时git rebase branch1,我branch1-local会发生冲突.我解决了冲突,做了git add <conflicted-add>然后git rebase --continue就像git要求我做的那样.之后,将应用新的提交.出现了新的冲突.但是再次发生同样的冲突!同一个文件!我再这样做,git addgit rebase --continue,然后这一切再次重复,直到我重复这一过程,每次提交被重建基础上.

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

pat*_*yts 12

你想要的是git rerere哪些记录冲突解决方案.我见过的最好的介绍现在是Git Book,Tools章节的一部分.实际上,当您执行rebase时,您将最终停止,但您只需检查合并冲突是否仍然已解决,然后git add继续.


Ada*_*ruk 5

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

缓解一些痛苦的一种方法是使用像 Beyond Compare 这样的智能合并程序。它具有语法感知能力,并且可以解决很多 Git 会(理所当然地)拒绝为你做的冲突。很多时候,这些工具在被调用时甚至不会打开其 UI、解决问题并允许您的git mergetool命令继续处理下一个冲突。请记住将“信任合并工具退出代码”设置为 true。

  • *仅在必要时才应使用 Rebase,而不是常规工作流程的一部分。*——这是完全错误的。来自马口:http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html (7认同)
  • 根据记录,我个人更喜欢合并(我已经在其他项目中成功地使用了它,没有那么多小故障),但是这个新团队想要使用变基,因为它使合并树看起来“更整洁”,并且上帝知道看起来更整洁的树胜过只解决一次冲突(特别是当想要查看整洁的树的领导自己没有做任何冲突解决时) (4认同)
  • 这太糟糕了。通常,来自 SVN 背景的 git 新手会像瘟疫一样避免分支和合并,希望有一个简洁的历史来查看。git 的强大之处在于检查图(DAG)以查看哪些内容已合并或尚未合并到感兴趣的分支中。您最好的选择是让他们经历所有冲突解决方案,然后建议尝试不依赖变基来保持整洁的工作流程。我的工作流程使事情井井有条。看看他们中的一两个人是否会阅读我的帖子。我应该写另一篇文章来解决这个问题。 (2认同)