假设有两个分支
develop
和master
.
他们是这样的(字母是commits),master是基于
develop
在B:创建的
A — B — C — D(开发)
A — B — E — F — (C cherry-picked) — G — H (master)
如何确认
C cherry-picked
是从上部的C
中挑选出来的?
幸运的是,到目前为止,我可以通过提交消息识别提交。但是,我想知道是否可以像上面那样确认。
我知道
commit
不是difference
而是像一张快照。
并且cherry-pick
是在提交之间计算的。
在这种情况下,我可以比较以下结果:
git diff F (C cherry-picked)
git diff B C
或
git show C
git show (C cherry—picked)
我希望有更好的方法..
你还没有明白什么是cherry pick.
它不是提交的copy。这是 Git 使用 merge logic 从无到有创建的 completely new commit。从技术上讲,它是 based 在精心挑选的提交上,从某种意义上说,精心挑选的提交确实 contribute 到新的提交,但这不是它所基于的 only 东西,新的提交是与精心挑选的提交完全不同。
并且新提交与精心挑选的提交没有任何关系连接。通过 cherry-picking,你故意 丢弃 与 cherry-picked 提交的所有历史联系。如果你不想那样做,你一开始就不应该挑选樱桃。
这就是为什么通常的做法是在生成的新合并提交的消息中包含精心挑选的提交的 SHA,正如您在问题中所说的那样。