在进行git rebase时,“ours”和“theirs”是什么意思?

22

我已经使用了以下命令,但在执行变基操作时有些困惑 - 在下面的命令中,ours和theirs分别代表什么?

git checkout app/dashboard-sprint-5
git rebase app/demandware

我知道当前的分支是app/dashboard-sprint-5,当我执行变基时,

app/dashboard-sprint-5将被应用在app/demandware之上。

在分支方面,“ours”和“theirs”是什么意思?

我查看了链接,但不满意。

2个回答

28
简单来说,当我们谈论变基(rebase)时,ours 意味着基础分支。
因此在你的情况下,ours 将是 app/demandware,因为首先 git 将我们移到这里,然后应用来自 app/dashboard-sprint-5 的更改,这将是 theirs
例如,在 文档 中有关变基和 ours 单词的说明:

因为 git 变基会使用给定的策略将工作分支中的每个提交都重播在 <upstream> 分支顶部,使用 ours 策略只是丢弃 <branch> 的所有补丁,这没什么意义。


6
这真的是我第一次理解这个,我已经处理冲突好多年了。我总是选择错误的选项,但现在不再如此。 - CodeMonkeyG
ours: the target-branch, theirs: the current-branch - undefined

6
为了更容易记住“我们”和“他们”的方向,可以将变基视为将当前分支的每个提交都挑选到目标分支上。
Before rebasing:
    A--B--C (master)
       '--D--E (devel, HEAD)

Reset HEAD to master:
    A--B--C (master, HEAD)
       '--D--E (devel)

Cherry-pick D, E.
    A--B--C (master)
       |  '-- D'--E' (HEAD)
       '--D--E (devel)
HEAD becomes "ours" and the old devel branch "theirs".
              ^^^^                            ^^^^^^

On success, repoint devel to E':
    A--B--C (master)
          '--D'--E' (devel, HEAD)

在一个没有冲突的非交互式变基中,我们看起来直接从旧的devel分支历史跳到了经过变基后的devel分支历史。在这种情况下,“我们”的颠倒和“它们”的颠倒并不明显,可能导致混淆,尤其是在合并冲突解决期间 - 突然被称为“远程分支”的分支对于合并工具来说确实有点出乎意料。
虽然这个问题已经得到回答,但我添加了更多可视化的解释,因为我发现很难记住结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接