我怀疑您在这里感到困惑,因为这从根本上来说是令人困惑的。更糟的是,当您进行基准调整时,我们/他们的整个工作切换角色(倒退)。
最终,在期间git merge
,“我们的”分支是指您要合并到的分支:
git checkout merge-into-ours
而“他们的”分支是指您要合并的(单个)分支:
git merge from-theirs
这里“我们”和“他们”有一定道理,因为,即使“他们”可能是你的,无论如何,“他们”是不是你是我的唯一的,当你跑了git merge
。
虽然使用实际的分支名称可能很酷,但在更复杂的情况下会分崩离析。例如,代替上面的方法,您可以这样做:
git checkout ours
git merge 1234567
您通过原始提交ID合并的位置。更糟糕的是,您甚至可以执行以下操作:
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
在这种情况下,不涉及分支名称!
我认为这里无济于事,但实际上,在gitrevisions
语法上,您可以在冲突合并期间按数字引用索引中的单个路径
git show :1:README
git show :2:README
git 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
为它们引入了更多名称,称它们为“本地”和“远程”!