【问题标题】:Cherry picking bug fixes correctly正确修复樱桃采摘错误
【发布时间】:2016-09-02 09:44:32
【问题描述】:

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

因此,我被引导相信,如果在功能分支中进行了错误修复并且另一个开发人员需要此修复,正确的解决方案是将这个修复樱桃挑选到它自己的分支中,然后将该分支合并到两个功能分支的共同分支。然后应该删除功能分支中的原始 bufix 提交,最后两个功能分支只需重新基于现在包含错误修复的公共分支。

但是,其他人似乎不是这样解释使用cherry-pick的。我认为如果一个提交是从一个特性分支中挑选出来的,并且两者都合并回公共,那么这些单独的提交会导致三件事之一发生;

  • 历史记录中的“重复”提交引入了相同的代码更改
  • 必须手动处理的合并冲突
  • 引入重复的代码行。

我是否错误地解释了樱桃采摘?

【问题讨论】:

  • 在我的情况下,不同分支上的两个相同提交(一个樱桃被选中)不应导致合并冲突或重复的代码行。你为什么这么肯定?
  • @lubilis 老实说,我不确定。我只是经常体验它,想知道这是我们如何使用cherry-pick还是其他东西。

标签: git cherry-pick


【解决方案1】:

不,如果你从一个分支中挑选一个提交到另一个分支,它会得到不同的哈希值,是的。不是因为分支名称,分支只是粘在提交上的便利贴。但是一个提交的整个历史是哈希计算的一部分,所以两个引入相同更改但在不同历史之上的提交本质上是两个引入相同更改的不同提交。

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

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

【讨论】:

  • 感谢您的澄清和解释。所以只是为了确认一下,当将两个分支合并回公共分支(而不是将一个分支重新定位到另一个分支上)时,第二个合并的分支将跳过樱桃挑选的提交?
  • 不,如果您合并,则不会跳过提交,因为合并不是提交方式。 rebase 以提交方式工作,因为它接受你 rebase 的提交并将它们一个接一个地应用到新的基本提交上,而忽略不引入更改的提交,这是樱桃挑选提交的情况。合并比较更改的内容并立即应用。但是由于引入的变化是相同的,所以不会有冲突,因为两次做同样的事情不是冲突,而是自动解决。
  • 好的,我明白了,冲突已自动解决,但两个提交都出现在公共分支历史记录中?
  • 在合并时应该是这样,是的
猜你喜欢
  • 2017-04-26
  • 2012-12-07
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多