git - git pull --rebase 通过保留本地更改来解决冲突
问题描述
我重新定位到我当地的分支机构。同时,有人在远程对这个分支进行了更改。我在做git pull --rebase
。我不明白 git 在命名current
and时如何解释这个命令incoming
,以及ours
and theirs
。
我应该选择哪个来始终保留我的本地更改?此外,在我第一次与 master 进行 rebase 之后,有几十个冲突。是否有命令git pull --rebase
只保留我所有的本地更改,而不必手动执行?我知道ours
and theirs
,但我不知道如何将这些关键字合并到git pull --rebase
命令中。
这些东西令人困惑,因为所有这些关键字在 merge 和 rebase 之间都颠倒了,然后再有 rebase 的 pull 来增加额外的混乱。
解决方案
支持本地分支更改的命令是:
git pull --rebase -X theirs
当直觉上你想说“我们的”时,你必须说“他们的”的原因是因为与合并相比,“我们的”和“他们的”的含义在变基期间交换了。让我解释。
我们和他们的合并与变基
当你进行合并时,你总是合并到当前分支;如果发生冲突,“我们的”表示您所在的分支,而“他们的”表示您正在合并的分支。完全如您所料。
变基是不同的。假设您正在重新设置一个名为 on 的local
分支master
。
master
⌄
o---o---o
\
A---B---C ‹ local
在 rebase 期间,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
在这种情况下,“ours”表示 Git 正在处理的临时分支,而“theirs”是从其中挑选提交的分支,即local
.
如果您想将更改保留在您的local
分支中,则必须选择“他们的”一侧。相反,如果您想将更改保留在 中master
,您会选择“我们的”一侧。
解决冲突后,Git 通过移动local
到指向 where HEAD
is 来完成 rebase 操作:
master
⌄
o---o---o---A'---B'---C' ‹ HEAD, local
\
A---B---C
鉴于没有留下引用 commit 的分支C
,这些提交将变得无法访问并最终将被删除:
master
⌄
o---o---o---A'---B'---C' ‹ HEAD, local
1它实际上只是一个分离的 head,但出于解释的目的,您可以将其视为临时分支,即使没有创建分支引用。
推荐阅读
- python - 如何将 AWS Textract 与 Python 结合使用
- c# - HttpPatch 操作与 JsonPatchDocument 和动态对象问题
- c - 要求用户输入文件名。并且在循环中比要求用户写入和关闭文件。在 c
- regex - 如何从正则表达式中仅返回第二组
- excel - 使用非连续范围的 Excel TREND 函数
- vue.js - 如何在 Vue 中使用 v-for 显示分组项目?
- python - python中的返回函数和返回函数对象有什么区别?
- python-3.x - 找到给定 (x,y) 坐标的所有可能三角形的平均质心
- ios - CKFetchRecordZoneChangesOperation 未在共享记录删除时调用 recordWithIDWasDeletedBlock
- php - Laravel 7 - 使用 Apple 登录会导致会话被多次覆盖