我改行成为本地分支机构的管理员。同时,有人对该远程分支进行了更改。我在做git pull --rebase
。对于current
和incoming
以及ours
和theirs
的命名,我不理解git如何解释此命令。
我应该选择哪个始终保留本地更改?另外,在我第一次与师傅建立基础之后,还有许多冲突。是否有一条命令可以使git pull --rebase
仅保留我的所有本地更改,而不必手动进行?我了解ours
和theirs
,但是我不知道如何将这些关键字合并到git pull --rebase
命令中。
这东西真是令人困惑,因为所有这些关键字在merge和rebase之间都被颠倒了,然后再加上rebase来增加额外的混乱。
答案 0 :(得分:4)
支持您的本地分支中的更改的命令是:
git pull --rebase -X theirs
在直觉上想说“我们的”时,不得不说“他们的”的原因是因为与合并相比,在重组期间“我们的”和“他们的”的含义被交换了。让我解释一下。
进行合并时,您总是会合并到当前分支中。如果发生冲突,“我们的”表示您所在的分支,而“他们的”表示您正在合并的分支。完全符合您的预期。
变基有所不同。假设您要将一个名为local
的分支重新部署到master
上。
master
⌄
o---o---o
\
A---B---C ‹ local
在重新设置基准期间,Git创建一种“临时分支”来进行工作 1 。首先将HEAD
移至要重新建立基础的分支的顶端,在本例中为master
:
master
⌄
o---o---o ‹ HEAD
\
A---B---C ‹ local
然后,它一次从local
处抓取一个提交:
master
⌄
o---o---o---A'---B' ‹ HEAD
\
A---B---C ‹ local
现在,让我们来看看提交C
有冲突的图像:
master
⌄ X
o---o---o---A'---B'---C' ‹ HEAD
\
A---B---C ‹ local
在这种情况下,“我们的”表示Git正在使用的临时分支,而“他们的”则是从中挑选提交的分支,即local
。
如果您想将更改保留在您的local
分支中,则必须选择“它们”。相反,如果您想将更改保留在master
中,请选择“我们的”一面。
冲突解决后,Git通过将local
移至HEAD
所在的位置来完成变基操作:
master
⌄
o---o---o---A'---B'---C' ‹ HEAD, local
\
A---B---C
鉴于没有分支引用提交C
,这些提交将变为unreachable,最终将被删除:
master
⌄
o---o---o---A'---B'---C' ‹ HEAD, local
1 它实际上只是一个detached head,但是出于解释的目的,即使没有创建分支引用,您也可以将其视为临时分支。 >