gitcherry-pick是如何计算补丁的



我了解gitcherry-pick是如何在高层工作的:它接受一次提交中引入的更改,并将其应用于另一次提交。

然而,我正试图更好地理解git是如何在幕后实现这一点的。

假设您运行以下程序:

$ git checkout main
$ git cherry-pick source-commit

我的理解是,由于提交是一个快照,而不是一组更改,所以樱桃选择必须首先计算某种diff,然后将该补丁/diff应用于当前分支(main(。这个补丁只是source-commit与其父代的差异吗?是否涉及source-commitmain的合并基础?

实际上,用一次提交执行git cherry-pick HASH或多或少相当于:

  1. git show --patch HASH > temp.diff
  2. git apply temp.diff

反过来,上面的步骤1计算给定提交与其单亲之间的差异。

(您可以选择合并,但必须使用选项-m parent-number指定要与哪个父级进行比较。(

关于合并库,HASH和main的合并库AFAIK完全不涉及。请注意,在发生冲突的情况下,如果您配置了diff3冲突样式,则中间的hunk(用于合并的是合并基(只是cherry的父对象。

相关内容

  • 没有找到相关文章

最新更新