git rebase 什么时候会有冲突?

When will git rebase have conflict?

我已经在这个论坛、progit、Youtube 和一些随机博客上阅读了几个 post 的 rebase。

总结该主题的最一般形式是:

- A - B - C   Master
   \  D - E Topic

我执行:

git checkout Topic
git rebase Master

理想情况下,应该是:

- A - B - C - D' - E' Master, Topic

但两个问题是:

  1. D' = D,E' = E 吗?
  2. 什么是 git 变基冲突?

关于第一个问题和,

  1. Rebase 在 D 和 E 上进行合并,最重要的是,输入复杂。

比如去D的时候,根据post如果我猜对了

  1. HEAD 分离到 C
  2. Git比较从A到D的变化和从A到C的变化
  3. 合并后,git比较D'、D和E

这是最让我困惑的。为什么合并涉及超过 2 个提交?还有,怎么会出现冲突?

编辑:

运行一些命令,请看下面:

git init

创建了 Random.txt 内容:大师1

git add Random.txt
git commit -m "Master 1"

创建新分支

git checkout -b rebase_conflict

改变Random.txt 内容:1

git add Random.txt
git commit -m "Conflict 1"

改变 运行dom。文本文件 内容:2

git add Random.txt
git commit -m "Conflict 1"

转主

git checkout master

改变Random.txt 内容:大师2

git add Random.txt
git commit -m "Master 2"

切换分支并变基

git checkout rebase_conflict
git rebase master

获取冲突错误 改变 Random.txt 内容:1

git add Random.txt
git rebase --continue

在这一点上,我预计会发生另一个 rebase 冲突,因为根据逻辑

-- Master 1 -- Master 2
  \ -- Conflict 1 -- Conflict 2

第一次变基后

-- Master 1 -- Master 2 -- Conflict 1'
 \ -- Conflict 1 -- Conflict 2

在这个阶段,我期待在冲突 1 之上进行新的提交。 Conflict 2 和 Conflict 1'之间是否存在合并冲突?

因为冲突 1' Random.txt 内容:1,而

冲突 2 Random.txt 内容:2

他们换了同一条线路,不是吗?

在你上面的例子中,无论是合并还是变基都可能导致合并冲突。有可能只有一个或另一个也会发生冲突。要了解变基的作用,请考虑下图,该图显示了在 Master 上变基后 Topic 的样子:

Topic:  -- A -- B -- C -- D' -- E'

此处的撇号表示 DE 提交已重新应用到 Master 的新基础上。当重新应用每个提交时,存在合并冲突的机会。因此,在重新应用 N 次提交的情况下,可能会有 N 组合并冲突。另一方面,合并总是会导致至多一组合并冲突。如果这是您的顾虑,那么您可能更喜欢合并而不是变基。