【问题标题】:What is "ours" and "their" while doing git rebase做 git rebase 时什么是“我们的”和“他们的”
【发布时间】:2018-05-27 07:58:42
【问题描述】:

我已经应用了以下命令,但在做 rebase 时几乎没有混淆 - 以下命令中我们的和他们的是什么

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

我知道当前分支是app/dashboard-sprint-5,当我应用变基时。

app/dashboard-sprint-5 将应用于app/demandware 的顶部。

就分支而言,ourstheirs 是什么。

我已经检查了link 但不满意

【问题讨论】:

    标签: git version-control rebase


    【解决方案1】:

    简单地说,当我们谈论 rebase 时,ours 表示基础分支。

    所以在你的情况下,ours 将是 app/demandware,因为首先 git 将我们移到那里,然后应用来自 app/dashboard-sprint-5 的更改,这将是 theirs

    例如,这里来自documentation 关于rebase 和ours 的注释:

    因为 git rebase 使用给定的策略从 分支顶部的工作分支重放每个提交,使用 ours 策略只是丢弃 中的所有补丁,这几乎没有感觉。

    【讨论】:

    • 这确实是我第一次明白这一点,多年来我一直在解决冲突。我总是选择错误的选项,但现在不会了。
    【解决方案2】:

    为了轻松记住 ourstheirs 的方向,可以将 rebase 视为将当前分支的每个提交都挑选到目标分支上。

    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)
    

    在没有冲突的非交互式 rebase 中,看起来我们直接从旧的 devel-branch 历史跳转到 rebase devel-branch 历史。在这种观点中,ourstheirs 的倒置并不明显,这会导致潜在的混淆,尤其是在合并冲突解决期间 - 只是有点出乎意料,分支我们从可能突然被合并工具称为“远程分支”。


    虽然这个问题已经回答了,但我还是添加了这个更直观的解释,因为我发现没有答案就很难记住结果。

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 2021-01-02
      • 2018-10-12
      • 2012-10-23
      • 2012-03-21
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      相关资源
      最近更新 更多