3 回答
TA贡献1895条经验 获得超3个赞
我怀疑您在这里感到困惑,因为这从根本上来说是令人困惑的。更糟的是,当您进行基准调整时,我们/他们的整个工作切换角色(倒退)。
最终,在期间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为它们引入了更多名称,称它们为“本地”和“远程”!
- 3 回答
- 0 关注
- 777 浏览
添加回答
举报