为啥 git rebase 的合并冲突通常比合并少?

Posted

技术标签:

【中文标题】为啥 git rebase 的合并冲突通常比合并少?【英文标题】:Why does git rebase often have fewer merge conflicts than a merge?为什么 git rebase 的合并冲突通常比合并少? 【发布时间】:2012-10-22 06:49:49 【问题描述】:

我经常听到有人说,与 git merge 相比,使用 git rebase 可以减少合并冲突的数量,但我从来没有找到解释为什么会这样。

当两个人都修改同一行代码时,简单地在另一组更改之上重放一组更改并不能神奇地消除内在冲突,那么是什么让 rebase 更好?

谁能提供一个简单的例子,合并会产生冲突,而变基不会?

更新:经过 3 年的 git 经验,我开始相信我原来的前提是错误的:在 rebase 和 merge 中冲突的可能性相同。然而,rebase 确实使历史更容易理解,并在需要时选择或倒带。

【问题讨论】:

实际上,rebase 可以给你带来比合并更多的冲突:考虑两个提交,一个引入一些冲突的更改,另一个还原它。在变基期间,您必须解决一个甚至两个冲突,而合并将完全跳过该更改+还原对。 【参考方案1】:

您在提交中解决了本应引入它们的冲突,因此实际上,您没有任何冲突。

如果我在我的特性分支中编辑了一个在主分支中发生变化的行,并进行直接合并,它将发生冲突。

如果我变基,它将在我进行此更改的提交处停止,然后我处理冲突。

【讨论】:

听起来你还在解决冲突,只是在不同的时间?我的理解是它实际上比这更好,并且如果你重新设置而不是合并,甚至不会发生一些冲突。不过希望看到对此的肯定。

以上是关于为啥 git rebase 的合并冲突通常比合并少?的主要内容,如果未能解决你的问题,请参考以下文章

git rebase -i 合并多次提交

Git rebase冲突

Git分支合并冲突解决(续)

merge和rebase的区别

git rebase

git rebase合并同一个分支的多个提交