那么它不应该是平等的吗?如果我有功能和主分支,并且我想在主服务器上移动功能分支,那就像从每个提交功能分支到主服务器的樱桃一样?
我的想法是它应该是真的,但由于某些原因,对主人的重新定位失败了一些冲突,而樱桃挑选每一次提交都运行得很好。
答案 0 :(得分:2)
代码明智的樱桃采摘分支(或你在顶层变基础)是,如果你选择正确的顺序强>
的差异:
我猜你是在奇怪的顺序中挑选樱桃。例如:
A->B->C
\
D->E
在C上重新制作E就像是从CD中挑选樱桃,然后是E.发布你的树,并且在重新建立时会发生冲突,以及你挑选的顺序 - 看到任何“问题”。< / p>
答案 1 :(得分:2)
大多数情况下,是的,但不完全正确。
首先,有三种方法可以实现git rebase
。交互式的一个和-m
的一个字面上运行git cherry-pick
。非交互式非合并版本默认情况下会在内部使用git format-patch | git am
,这有时会产生与运行git cherry-pick
不同的结果。
其次,并非每个提交都被选中。特别是,git rebase
通常会消除:
字面上的合并无法复制,所以除了使用-p
(毕竟不复制它们,而是重新执行合并)时,它不会打扰。无法通过git format-patch
复制Empty-diff提交,并且通常不需要正确性,因此默认设置是丢弃它们。添加-k
(保持为空)甚至使非交互式rebase使用git cherry-pick
,可以复制empty-diff提交。
最后,根据选项,rebase的所有变体都可以使用“fork point”代码来丢弃要复制的提交集中的一些前导提交。使用--no-fork-point
会禁用此选项,默认情况下会为某些 rebase禁用此选项,但默认情况下会为其他 rebase启用。详细信息在the git rebase
documentation中详细说明。
除非您正在运行git rebase -m
或git rebase -i
,否则您看到的差异很可能是由于使用git format-patch | git am
。如果您能够识别git am
在git apply -3
上运行git cherry-pick
时采用的具体提交,与git rev-list
运行时相比,这将非常有用,因为提交这种情况的提交有点罕见(我没有时间构建一个人工示例,而真实的示例可能更有价值。)
1 为了做出这个决定,Git使用git patch-id
,您可以手动运行;或者您可以使用git cherry
或git rev-list
让Git自动为您运行它。 rebase代码使用git format-patch
(有时通过将这些参数或等效参数传递给--reverse --topo-order
,有时使用git rev-list --cherry-pick --right-only --no-merges upstream...HEAD
):
1.000,39-
1.000,39
39,9
45,4-
22.323.222,49
40
58-
333.294
33.292,00%
33.292,00 %
39 %
22%
-22,29
-4.343,1
(注意三个点,它们调用对称差异选择器)。