git checkout:quot;“他们的”;及;“我们的”;
报告说: --我们的 ——他们的 从索引中检出路径时,请检出未合并路径的第2阶段(我们的)或第3阶段(他们的) 在合并、重定基础和樱桃采摘期间,“第二阶段”和“第三阶段”的含义是什么?在运行命令之前,是否有办法查询这些“阶段”,以确保它将检索到正确的版本?这些记录(尽管我认为不是很清楚)在: 冒号(可选后跟阶段号(0到3)和冒号(可选后跟路径)在给定路径的索引中命名blob对象。缺少的阶段编号(及其后面的冒号)将阶段0条目命名。在合并过程中,阶段1是公共祖先,阶段2是目标分支的版本(通常是当前分支),阶段3是正在合并的分支的版本 然后,您需要添加有关git checkout:quot;“他们的”;及;“我们的”;,git,version-control,merge,git-branch,branching-and-merging,Git,Version Control,Merge,Git Branch,Branching And Merging,报告说: --我们的 ——他们的 从索引中检出路径时,请检出未合并路径的第2阶段(我们的)或第3阶段(他们的) 在合并、重定基础和樱桃采摘期间,“第二阶段”和“第三阶段”的含义是什么?在运行命令之前,是否有办法查询这些“阶段”,以确保它将检索到正确的版本?这些记录(尽管我认为不是很清楚)在: 冒号(可选后跟阶段号(0到3)和冒号(可选后跟路径)在给定路径的索引中命名blob对象。缺少的阶段编号(及其后面的冒号)将阶段0条目命名。在合并过程中,阶段1是公共祖先,阶段2是目标分支的版本(通常是当前分
git-rebase
和git-cherry-pick
工作原理的知识
正常的樱桃采摘是定义明确的:“我们的”是HEAD
版本,即您曾经(现在)在的分支,而“他们的”是您正在积极采摘的提交。当你仔细挑选一个提交时,一切都很明显:第一阶段是所谓的共同祖先提交,第二阶段是当前分支顶端的版本,第三阶段是你仔细挑选的版本
如果您选择了一系列提交,这仍然是正确的,只是迭代地正确。例如,假设您正在选择三个提交。Git一次只做三个。在第一次樱桃采摘期间,第2阶段是分支的顶端,第3阶段是第一次樱桃采摘的提交的版本。一旦提交完成,git将进行一次新的提交,推进分支的顶端。然后,在第二次樱桃采摘期间,第2阶段是分支的顶端,这是第一次樱桃采摘的提交,第3阶段是第二次提交的版本。对于最后的提交,这将再次重复。每一次,第三阶段都是“他们的”版本
然而,重基有点棘手。在内部,它首先让你进入一个新的匿名分支(“分离的头”)。然后运行git cherry pick
从原始分支中选择每个提交。这意味着“我们的”是独立的头部版本,而“他们的”是来自原始分支的版本。就像cherry pick一样,对于要拾取的每个提交,该操作都会迭代重复(在交互式重基的情况下,您可以编辑pick
行)。一旦重新基址完成,git只需将分支标签洗牌,这样您刚刚创建的新匿名分支就是您的代码
简言之,您可以将rebase视为“反转我们/他们的设置”——但这是一种夸张。可以更准确地说,第2阶段是新的、融合的代码,而第3阶段是旧代码
根据定义,阶段1是合并基础。对于真正的合并,这是最好的公共祖先提交,但cherry-pick强制将其提交给cherry-pick提交的父级。(除“复制”的提交是父项,“合并基”是要还原的提交外,还原的工作方式与此类似。)的(以及一些其他位置)说明索引文件最多记录三个版本或阶段: 对于冲突路径,索引文件最多记录三个版本:阶段1存储来自公共祖先的版本,阶段2存储来自HEAD,阶段3存储来自MERGE_HEAD(您可以使用git ls files-u检查阶段)。工作树文件包含“合并”程序的结果;i、 e.使用熟悉的冲突标记的三方合并结果> 下图显示了典型Git合并中的三个阶段:
Common Ancestor -> C1 --- C2 <- MERGE_HEAD (Stage 3)
(Stage 1) \
--- C3 --- C4 <- HEAD (Stage 2)
当cherry选择单个提交时,您会说“阶段1是共同的祖先”。我认为这是错误的。阶段#1是您正在进行cherry pick的提交的父级。@wds:是的,阶段1是合并基础,它确实是正在进行cherry pick的提交的父级。我会解决的。
git ls-files -u