为什么我必须一遍又一遍地解决相同的“git rebase”冲突?

55
当我在本地分支branch1-local执行命令git rebase branch1时,会出现冲突。我解决了这个冲突,使用git add <conflicted-add>,然后执行git要求的git rebase --continue。之后一个新的提交被应用。接着又出现了一个新的冲突,但是是同一个文件中的相同冲突。我再次执行git addgit rebase --continue,然后这一切都会重复,直到每个提交的变基过程都重复了一遍。
为什么重新变基让我反复解决同一个冲突?

3
我从未使用过它,几乎没有阅读其文档,但是看一下git rerere,据我所知它被用于“记录”冲突解决方案并避免重复。请查看https://dev59.com/b2035IYBdhLWcg3wQt2n以了解此功能的常见问题。 - KurzedMetal
你有没有找出这是为什么发生的?我有其他人报告了同样的问题,我想重现这样一种情况,在重新定义基础时需要多次应用完全相同的冲突解决方案 - Christoph
4
是的,解决方案就是永远不再使用 rebase。只需要使用 pullmerge,并使用 add 进行解决即可满足所有需求。 - lurscher
2
兄弟,别对rebase抱有敌意。那玩意儿可是黄金般的存在。 - henrebotha
2
Rebase基本上很糟糕,因为它改变了历史并创建了与实际开发中从未存在过(因此从未经过测试)的任何状态不相对应的提交。放弃它是一个好的选择。 :) - Marnen Laibow-Koser
显示剩余3条评论
2个回答

14
你需要的是能记录冲突解决方案的git rerere。我见过最好的介绍现在已经包含在Git Book 的工具章节中。实际操作时,当你执行变基操作时,你会像以前一样停下来,但你只需检查合并冲突是否已经解决,然后用git add继续即可。

5
你不应该一遍又一遍地遇到同样的冲突。Rerere 对此无济于事。 这只是意味着你试图回放提交的代码库非常不同,每个提交都需要你的帮助来调整。这是支持合并而不是变基的原因之一。在我看来,变基只有在必要时才应该使用,而不是成为你常规工作流程的一部分。Rerere 将会在合并或重置类型的工作流程中提供更多帮助。以下是我的避免变基的工作流程:http://dymitruk.com/blog/2012/02/05/branch-per-feature/ 缓解一些痛苦的方法之一是使用像 Beyond Compare 这样的智能合并程序。它是语法感知的,会解决 Git 正确拒绝为你解决的很多冲突。很多时候,这些工具在被调用时甚至不会打开其用户界面,解决问题并允许你的 git mergetool 命令继续下一个冲突。记得将 "trust mergetool exit code" 设置为 true。

4
记录一下,我个人倾向于合并(在其他项目中成功使用过,没有出现任何问题),但这个新团队想使用变基,因为它使合并树看起来更加“整洁”,天知道一个看起来整洁的树比只解决一次冲突要好(特别是当负责查看整洁树的领导自己不进行任何冲突解决时)。 - lurscher
2
太糟糕了。通常,从避免分支和合并的SVN背景中转到git的新手希望有一个整洁的历史记录来查看。Git的强大之处在于检查图形(DAG)以查看什么已经或尚未合并到感兴趣的分支中。你最好的选择是让他们忍受所有冲突解决,并随后建议尝试一种不依赖于rebase来保持整洁的工作流程。我的工作流程使事情非常有组织性。看看他们中是否有一两个人会阅读我的文章。我应该写另一篇文章来解决这个问题。 - Adam Dymitruk
7
“只有当必要时,才应使用 Rebase,而不是作为您常规工作流程的一部分。”——这个说法是错误的。从权威消息来源可以得知:http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html - Jonah
1
@BenGeorge,我从Linus的话中完全没有读出那个意思。不管他或她的工作流程如何,每个人都有在发布之前清理工作的时候。而且我认为,在公共分支上重新定位私有工作似乎符合他的建议,尽管我对这一点不是100%清楚。 - Jonah
1
@Jonah,在你的私有分支中重新定位以修复三个提交之前的一些小错误可能是一个非常好的主意(但是,请在每个重写的提交上重新运行测试套件)。将整个分支重新定位到当前的上游开发边界(有些人喜欢它,但这意味着您可能会无意中更改进行更改的假设),重新定位已经公开的内容通常是一个非常糟糕的主意(这是混淆的直接途径)。在每种情况下,只有当重新定位的原因比由此可能导致的问题更重要时才重新定位。 - cmaster - reinstate monica
显示剩余4条评论

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