我很好奇什么是'git-cherry‘(相当于'git cherry')算法。假设我在主题分支上,它是从master分支出来的,它有一些新的提交A,B,C。假设B被选为master
master--D-E-B
\
\-topic-A-B-C这会让我知道A,B,C中的哪一个被精心挑选成了大师。在这种情况下,B是。
git checkout topic
git cherry origin/master
+A
-B
+C“git cherry”是怎么知道的?这里使用的算法和元数据是什么,以及它的存储位置?它可以计算“commit B diff”的哈希,并检查master中是否存在确切的commit diff哈希。但非平凡的合并又如何呢?提交差异将是不同的。
谢谢,
发布于 2021-04-08 15:56:13
git cherry是一个前端,它可以使更复杂、能力稍差的git rev-list --cherry-mark输出更有用(并且避免了对称差异参数的需要;见下文)。
git rev-list --cherry-mark的工作方式与您所建议的非常相似:
Git可能已经计算出“commit B diff”的哈希值,并检查主节点中是否存在确切的commit diff哈希值。
这被称为补丁id,有一个Git程序来生成它,这个程序自然被称为git patch-id。从Git1.9开始,有两种类型的补丁ID可用,如the documentation中所述。
但非平凡的合并又如何呢?
在这里,patch-ID往往不匹配,所以Git会考虑这些不同的提交。这可能就是我们想要的,因为合并本身是非常重要的(即,需要手动解决)。
请注意,在使用git rev-list --cherry-mark时,必须使用三点表示法(请参见the gitrevisions documentation)选择对称差选项。计算了patch-ID的提交是来自对称差异的左侧和右侧的提交。git cherry命令通过upstream、head和limit参数在内部生成适当的修订列表。
https://stackoverflow.com/questions/66999311
复制相似问题