樱桃采摘错误修复正确

Cherry picking bug fixes correctly

所以根据我的理解,cherry-picking 从一个分支到另一个分支的提交会创建一个全新的哈希签名,尽管实际的代码更改是相同的。我相信这是因为提交哈希签名取决于分支名称和提交时间等。

正因为如此,我被引导相信如果在一个功能分支中修复了错误并且另一个开发人员需要这个修复,正确的解决方案是将这个修复挑选到它自己的分支中,然后合并那个分支到公共分支,这两个特性分支都从中分支出来。然后应删除功能分支中的原始 bufix 提交,最后两个功能分支只需重新建立在现在包含错误修复的公共分支之上。

但是,这似乎不是其他人使用 cherry-pick 的解释方式。我认为,如果从一个功能分支中挑选出一个提交到另一个功能分支,并且两者都合并回公共,那么这些单独的提交会导致以下三种情况之一发生;

我对 cherry pick 的理解有误吗?

不,如果你从一个分支中挑选一个提交到另一个分支,它会得到一个不同的哈希,是的。不是因为分支名称,分支只是一个 post-it 坚持提交。但是提交的整个历史记录是哈希计算的一部分,因此引入相同更改但在不同历史记录之上的两个提交本质上是引入相同更改的两个不同提交。

如果您将一个分支变基到另一个分支,并且两个提交都引入了相同的更改(从一个分支到另一个分支),变基分支将不包含两个提交,而是基于历史的提交已经引入的更改将被忽略,就像从未完成过一样。

如果您合并分支,则不会因为挑选而产生冲突,因为两个分支都进行了相同的更改并且 Git 看到并正确处理了这一点。如果您对同一文件进行其他更改,这些更改可能会产生需要解决的冲突。