在您的本地分支中支持更改的命令是:
git pull --rebase -X theirs
为什么你想说“ours”,却必须说“theirs”呢?这是因为在rebase和merge时,“ours”和“theirs”的含义被交换了。让我解释一下。
合并和变基中的Ours和Theirs
当你进行合并操作时,你总是将其合并到当前分支;如果存在冲突,“ours”表示你所在的分支,而“theirs”则表示你正在合并的分支。这恰好符合你的预期。
而在变基操作中,则有所不同。假设你正在将名为local
的分支变基到master
分支。
master
⌄
o---o---o
\
A---B---C ‹ local
在 rebase 过程中,Git 会创建一种类似于“临时分支”的东西来完成工作1。 它首先将 HEAD
移动到您正在 rebase 到的分支的末端,即这里的 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
在这种情况下,“ours”表示Git正在处理的临时分支,而“theirs”是从中挑选提交的分支,即local
。
如果您想要将更改保留在local
分支中,则必须选择“theirs”一侧。相反,如果您想要将更改保留在master
中,则应选择“ours”一侧。
一旦冲突得到解决,Git通过将local
移动到HEAD
的位置来完成rebase操作:
master
⌄
o---o---o---A'---B'---C' ‹ HEAD, local
\
A---B---C
假设没有分支引用提交C
,那些提交就会变成不可达,并最终被删除:
master
⌄
o---o---o---A'---B'---C' ‹ HEAD, local
1实际上这只是一个分离头指针,但为了方便解释,你可以将其视为一个临时分支,尽管并没有创建任何分支引用。
git pull --rebase
命令,若要保留“我”的更改,请使用git pull --rebase -Xtheirs
。对于没有使用--rebase
选项的git pull
命令,若要保留“我”的更改,请使用git pull -Xours
。 - ElpieKay