Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git checkout:quot;“他们的”;及;“我们的”;_Git_Version Control_Merge_Git Branch_Branching And Merging - Fatal编程技术网

git checkout:quot;“他们的”;及;“我们的”;

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是目标分支的版本(通常是当前分

报告说:

--我们的 ——他们的 从索引中检出路径时,请检出未合并路径的第2阶段(我们的)或第3阶段(他们的)

在合并、重定基础和樱桃采摘期间,“第二阶段”和“第三阶段”的含义是什么?在运行命令之前,是否有办法查询这些“阶段”,以确保它将检索到正确的版本?

这些记录(尽管我认为不是很清楚)在:

冒号(可选后跟阶段号(0到3)和冒号(可选后跟路径)在给定路径的索引中命名blob对象。缺少的阶段编号(及其后面的冒号)将阶段0条目命名。在合并过程中,阶段1是公共祖先,阶段2是目标分支的版本(通常是当前分支),阶段3是正在合并的分支的版本

然后,您需要添加有关
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