git-rebase什么时候会发生冲突



我已经阅读了这个论坛、progit、Youtube上的几篇帖子,以及一些关于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-rebase冲突

关于第一个问题和这篇文章,

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

例如,当它转到D时,根据帖子,如果我是正确的

  1. 头部分离到C
  2. Git比较从A到D的变化和从A到C的变化
  3. 合并后,git在D'、D和E之间进行比较

这让我最困惑。为什么合并涉及2个以上的提交?此外,冲突是如何出现的?

编辑:

运行了一些命令,请参阅以下内容:

git init

创建了Random.txt内容:Master 1

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

创建新的分支

git checkout -b rebase_conflict

Alter Random.txt内容:1个

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

随机改变。txt内容:2

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

切换到主

git checkout master

Alter Random.txt内容:Master 2

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

切换分支并重新调整基础

git checkout rebase_conflict
git rebase master

获取冲突错误Alter Random.txt内容:1个

git add Random.txt
git rebase --continue

在这一点上,我预计会发生另一次重新基准冲突,因为根据的逻辑

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

在第一次重新基准之后

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

在这个阶段,我期待着在冲突1之上有一个新的承诺。冲突2和冲突1'之间是否存在合并冲突?

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

冲突2 Random.txt内容:2

他们改变了同一条线,不是吗?

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

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

这里的撇号表示DE提交已经被重新应用到Master的新基上。当每次提交都被重新应用时,就存在合并冲突的可能性。因此,在重新应用N个提交的情况下,可能存在N组合并冲突。另一方面,合并总是导致最多一组合并冲突。如果这是你关心的问题,那么你可能更喜欢合并而不是重新调整基础。

最新更新