Git - 术语混淆,“theirs”与“mine”的区别。

38

我完全不清楚"mine vs theirs"的含义。在这种情况下,我有一个功能分支,通过 rebase -i,我刚刚将大约80个提交压缩成了一个提交并将其合并回到develop。我遇到了一些冲突,我只想使用我的功能分支上的任何代码。我尝试了"mine",但实际上它似乎是相反的。

可以有人解释一下这个术语吗?

3个回答

67

ourstheirs是一个有点令人困惑的概念;在执行rebase操作时会更加复杂:

当进行合并时,ours指的是您要合并的分支 into,而theirs则指的是您要合并的分支from。因此,如果您试图在merge过程中解决冲突:

  • 使用ours接受当前所在分支上的更改
  • 使用theirs接受要合并进来的分支上的更改。

这很有道理,对吧?

rebasing 时,ourstheirs则被颠倒了。在rebase过程中,文件会被选入一个“detached” HEAD分支。目标是HEAD分支,而merge-from是rebase之前的原始分支。这就是:

  • --ours是正在构建的匿名分支,
  • --theirs是正在rebase的那个分支;

也就是说,在rebase期间,当前分支的提交记录(一个接一个)将在我们打算rebase的分支上进行重播。


17
你说“theirs指代你正在合并的来源分支”,然后说“使用theirs来接受我们正在合并的分支的更改”- 嗯? 解释:第一个句子中的"theirs"是指正在从中进行合并的分支,而第二个句子中的"theirs"是指要接受所合并到的分支的更改。 - M.M
3
对术语"into"的使用不当。如果我在一个分支上,并且想要与主分支合并,运行"Git checkout --theirs 文件名"将使主分支的文件优先,从而覆盖我的分支副本。"--ours"则相反,使得我的分支在合并中具有优先权。 - Keith
8
嗯,我发现这个问题完全符合我的困惑。我已经阅读了得票最多的答案数次,但仍然不确定自己是否理解正确。回到谷歌搜索。 - HeyHeyJC
@HeyHeyJC 如果您能明确表达不清楚的具体内容,我可以尝试重新表述。 - Keith
1
混淆来自于“我们当前所在的分支”和“我们要合并到的分支”是同一个东西。我认为你指的第二种情况是“我们正在合并的分支是我们所在的分支”。我认为更清晰的表达方式是“接受你正在合并的分支中的更改”。 - Aerankas
3
所有矛盾的答案。当您在Gitlab进行分支比较合并时,您实际上并没有进入任何特定的分支,至少您不是明确知道的。 当您不使用命令行时,“源”和“目标”分支将是更明确的术语。 - Juan

24

"我们"(和"我的")指的是当前分支;而"theirs"指的是被合并的分支。听起来你实际上想使用"theirs"。


1
有时候,干脆利落的回答就是最好的。点赞 - jaysonragasa
3
我认为恰恰相反。 - Tejas

0

我承认一开始可能会有些困惑。我甚至写了一篇文章来详细解释这是如何工作的。

简而言之:"mine" 是你在分支中所持有的更改,"theirs" 是所有东西都要进入的目标分支。


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