我理解git cherry-pick是如何在高层次上工作的:它接受在一个提交中引入的更改,并将它们应用到另一个提交中。
然而,我正在试图更好地理解git实际上是如何在幕后做到这一点的。
假设您运行以下命令:
$ git checkout main
$ git cherry-pick source-commit我的理解是,由于提交是一个快照,而不是一组更改,因此必须首先计算某种差异,然后将该补丁/差异应用到当前分支(main)。这个补丁仅仅是source-commit和它的父补丁的区别吗?是否涉及source-commit和main的合并基础?
发布于 2020-09-04 00:03:18
实际上,使用单次提交执行git cherry-pick HASH或多或少等同于:
git show --patch HASH > temp.diffgit apply temp.diff反过来,上面的步骤1计算给定的提交和它的单个父级之间的差异。
(您可以选择合并,但必须使用选项-m parent-number指定要与之进行比较的父级。)
关于合并基,根本不涉及哈希和main的合并基AFAIK。请注意,在发生冲突的情况下,如果您已经配置了diff3冲突样式,那么中间的块(对于合并来说是合并基础)只是樱桃的父级。
https://stackoverflow.com/questions/63727181
复制相似问题