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
但两个问题是:
- D' = D,E' = E 吗?
- 什么是 git 变基冲突?
关于第一个问题和,
- Rebase 在 D 和 E 上进行合并,最重要的是,输入复杂。
比如去D的时候,根据post如果我猜对了
- HEAD 分离到 C
- Git比较从A到D的变化和从A到C的变化
- 合并后,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'
此处的撇号表示 D
和 E
提交已重新应用到 Master
的新基础上。当重新应用每个提交时,存在合并冲突的机会。因此,在重新应用 N 次提交的情况下,可能会有 N 组合并冲突。另一方面,合并总是会导致至多一组合并冲突。如果这是您的顾虑,那么您可能更喜欢合并而不是变基。
我已经在这个论坛、progit、Youtube 和一些随机博客上阅读了几个 post 的 rebase。
总结该主题的最一般形式是:
- A - B - C Master
\ D - E Topic
我执行:
git checkout Topic
git rebase Master
理想情况下,应该是:
- A - B - C - D' - E' Master, Topic
但两个问题是:
- D' = D,E' = E 吗?
- 什么是 git 变基冲突?
关于第一个问题和
- Rebase 在 D 和 E 上进行合并,最重要的是,输入复杂。
比如去D的时候,根据post如果我猜对了
- HEAD 分离到 C
- Git比较从A到D的变化和从A到C的变化
- 合并后,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'
此处的撇号表示 D
和 E
提交已重新应用到 Master
的新基础上。当重新应用每个提交时,存在合并冲突的机会。因此,在重新应用 N 次提交的情况下,可能会有 N 组合并冲突。另一方面,合并总是会导致至多一组合并冲突。如果这是您的顾虑,那么您可能更喜欢合并而不是变基。