git中“我们的”和“他们的”的确切含义是什么?

这听起来像是一个问题的基本知识,但是我一直在寻找答案,现在我比以前更加困惑。


将我的分支合并到另一个分支时,git中的“我们的”和“他们的”是什么意思?两个分支都是“我们的”。


在合并冲突中,“我们的”是否总是显示两个版本中的较高者?


“我们的”是否总是指合并开始时HEAD指向的分支?如果是这样,那为什么不使用诸如“当前分支”之类的清晰所有格代词,而不是使用指称性模棱两可的“我们”之类的所有格代词(因为这两个分支在技术上都是我们的)?


还是只使用分支名称(而不是说“我们的”,而要说“本地主人的”等)?


我最困惑的部分是,如果我在特定分支的.gitattributes文件中指定。可以说在测试分支中,我有以下.gitattributes文件:


config.xml merge=ours

现在我结帐,将HEAD指向master,然后合并到test中。由于master是我们的主人,并且test的.gitattributes未检出,它甚至会起作用吗?如果确实有效果,那么既然主人现在是我们的,那将会发生什么?


收到一只叮咚
浏览 778回答 3
3回答

蛊毒传说

我怀疑您在这里感到困惑,因为这从根本上来说是令人困惑的。更糟的是,当您进行基准调整时,我们/他们的整个工作切换角色(倒退)。最终,在期间git merge,“我们的”分支是指您要合并到的分支:git checkout merge-into-ours而“他们的”分支是指您要合并的(单个)分支:git merge from-theirs这里“我们”和“他们”有一定道理,因为,即使“他们”可能是你的,无论如何,“他们”是不是你是我的唯一的,当你跑了git merge。虽然使用实际的分支名称可能很酷,但在更复杂的情况下会分崩离析。例如,代替上面的方法,您可以这样做:git checkout oursgit merge 1234567您通过原始提交ID合并的位置。更糟糕的是,您甚至可以执行以下操作:git checkout 7777777    # detach HEADgit merge 1234567       # do a test merge在这种情况下,不涉及分支名称!我认为这没有什么帮助,但是实际上,在gitrevisions语法上,您可以在冲突合并期间按数字引用索引中的单个路径git show :1:READMEgit show :2:READMEgit show :3:README阶段1是文件的共同祖先,阶段2是目标分支版本,阶段3是您要从中合并的版本。“我们的”和“他们的”概念在此期间rebase被交换的原因是,通过执行一系列的樱桃操作,将重新建立基础工作到匿名分支(分离的HEAD模式)。目标分支是匿名分支,而merge-from分支是您的原始(重新设置基准)分支:因此,“-我们的”表示正在建立匿名的一个基准,而“-他们的”表示“正在重新建立我们的分支” 。至于gitattributes条目:它可能会产生影响:“我们的”实际上是在内部表示“使用阶段2”。但是正如您所注意到的,它当时实际上并不存在,因此它应该不会在这里起作用……好吧,除非您在开始之前将其复制到工作树中,否则不会这样做。另外,顺便说一句,这适用于我们及其使用的所有使用,但是有些是在整个文件级别上(-s ours对于合并策略;git checkout --ours在合并冲突期间),而有些是逐段的(-X ours或-X theirs在-s recursive合并)。这可能无助于解决任何混乱。不过,我从来没有想出一个更好的名字。并且:请参见VonC对另一个问题的回答,其中git mergetool为它们引入了更多名称,称它们为“本地”和“远程”!
打开App,查看更多内容
随时随地看视频慕课网APP