git checkout documentation表示:
--我们的
--他们的
从索引签出路径时,请签出阶段2(我们的)或阶段3(他们的)以查找未合并的路径。
“阶段2”和“阶段3”在合并、重新定位和樱桃采摘期间的含义是什么?在运行命令之前,是否有方法查询这些“阶段”,以确保它将检索正确的版本?

最佳答案

这些都记录在the gitrevisions documentation中(尽管我认为并不是那么清楚):
冒号(可选,后跟阶段号(0到3)和冒号,后跟路径)在给定路径处命名索引中的blob对象。缺少的阶段号(及其后面的冒号)命名阶段0条目。在合并过程中,阶段1是公共祖先,阶段2是目标分支的版本(通常是当前分支),阶段3是正在合并的分支的版本。
除此之外,您还需要添加有关git rebasegit cherry-pick如何工作的知识。
正常的樱桃采摘是很好定义的:“我们的”是HEAD版本,也就是说,你曾经(现在)在的分支,而“他们的”是你正在积极采摘的承诺。当你选择一个提交时,一切都很明显:阶段1是共同的祖先,阶段2是你当前分支顶端的版本,阶段3是你选择的版本。
如果您选择一系列提交,这仍然是正确的,只是迭代地正确。比如说,你在挑选三个承诺。git只是一次做三个一个。在第一个cherry pick期间,stage 2是分支的顶端,stage 3是第一个提交的cherry pick版本。一旦commit cherry pick完成,git将进行一次新的commit,从而提升分支的尖端。然后,在第二个cherry pick期间,stage 2是分支的顶端,这是第一个cherry pick所做的提交,stage 3是所选第二个提交的版本。在最后一次提交时再次重复此操作。每次,第三阶段都是“他们”的版本。
然而,rebase有点棘手。在内部,它首先让你进入一个新的匿名分支(“独立的头”)。然后运行git cherry-pick从原始分支中选择每个提交。这意味着“我们的”是独立的头部版本,而“他们的”是来自原始分支的版本。就像cherry pick一样,对于要选择的每个提交,这一操作都会重复进行(在交互式rebase的情况下,您可以编辑pick行)。一旦回扣完成,git只需将分支标签乱放,这样您刚才创建的新匿名分支就是您的代码。
简言之,你可以认为rebase是“颠倒我们/他们的设置”,但这是一种夸张。可以更准确地说,阶段2是您的新代码,融合在代码中,而阶段3是您的旧代码。

08-16 06:13