首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git Cherry-pick Workflow

Git Cherry-pick Workflow
EN

Stack Overflow用户
提问于 2009-08-06 21:50:25
回答 3查看 170K关注 0票数 335

假设我是回购程序的维护者,并且我想从一个贡献者那里得到一些更改,那么有几个可能的工作流:

  1. I cherry-pick每次从远程提交(按顺序排列)。在本例中,git将提交记录为与远程分支无关。
  2. i merge分支,引入所有更改,并添加新的“冲突”提交(如果需要)。
  3. I merge来自远程分支的每个提交(同样是按顺序排列),允许记录每个提交的冲突,而不是将所有的冲突分组为一个。为了完整性起见,
  4. 可以执行rebase (与cherry-pick选项相同?),但我的理解是,这可能会给贡献者造成混乱。也许这就消除了选择1.

在2和3中,git记录提交的分支历史,与1不同。

使用cherry-pick merge merge方法之间的利弊是什么?我的理解是,方法2是规范的,但我觉得用一个“冲突”合并来解决一个大的提交,不是最干净的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-06 22:14:19

rebase (和cherry-pick)和merge都有各自的优点和缺点。我在这里主张merge,但这两者都值得理解。(在这里寻找另一个论据充分的answer例程,其中rebase是首选的。)

mergecherry-pickrebase更受欢迎,原因有几点。

  1. 健壮性。提交的SHA1标识符不仅标识它本身,而且还标识它之前的所有其他提交。这为您提供了一个保证,在所有克隆中,给定SHA1的存储库状态是相同的。(理论上)没有可能有人做了看似相同的更改,但实际上正在破坏或劫持您的存储库。你可以选择个别的变化,它们很可能是一样的,但你没有保证。(作为次要的小问题,新的精选提交将占用额外的空间,如果其他人再次在同一提交樱桃选择,因为他们都将出现在历史上,即使你的工作副本最终是identical.)
  2. Ease的使用。人们倾向于相当容易地理解merge工作流。rebase往往被认为是更高级的。最好两者都理解,但那些不想成为版本控制专家的人(在我的经验中包括了许多擅长于他们的工作,但不想花额外时间的同事)合并就更容易了。

即使使用合并处理的工作流,rebasecherry-pick对于特定情况仍然很有用:

  1. merge的一个缺点是混乱的历史。rebase可以防止大量提交分散在您的历史记录中,就像在其他更改中定期合并时一样。事实上,这是我使用它的主要目的。您想要非常小心的是,永远不要使用与其他存储库共享的rebase代码。一旦提交被push编辑,其他人可能会在它之上提交,而重基充其量将导致上面讨论的那种重复。在最坏的情况下,您可能会遇到一个非常混乱的存储库和一些微妙的错误--您需要很长时间才能找到雪貂,out.
  2. cherry-pick对于从您基本上决定丢弃的主题分支中抽取一小部分更改是有用的,但是您意识到有一些有用的部分在上面。

至于更倾向于合并许多更改,而不是一个更改:它只是简单得多。一旦您开始拥有大量的变更集,那么进行单个变更集的合并会变得非常乏味。git (以及Mercurial和Bazaar)中的合并分辨率非常好。在大多数情况下,即使合并长分支,也不会遇到重大问题。我通常一次合并所有的东西,只有当我有大量的冲突时,我才会备份,然后零星地重新运行合并。即使这样,我也会大手大脚地做。作为一个非常真实的例子,我有一位同事需要合并3个月的更改,并在250000行代码库中得到了大约9,000个冲突。我们修复的方法是一次进行一个月的合并:冲突不会线性地累积起来,而分片处理导致的冲突远远少于9000次。这仍然是大量的工作,但不如试着一次做一次。

票数 331
EN

Stack Overflow用户

发布于 2009-08-08 12:22:19

在我看来,摘樱桃应该保留在罕见的情况下,它是需要的,例如,如果你做了一些直接的‘主人’分支(主干,主要开发分支),然后意识到它也应该应用到‘主板’。您应该将工作流建立在合并或重基(或"git拉-重基“)基础上。

请记住,从Git (具有不同的SHA-1标识符)的角度来看,樱桃或重基提交是不同的,因此与远程存储库中的提交不同。(Rebase通常可以处理这个问题,因为它检查修补程序id,即更改,而不是提交id)。

同样,在git中,您可以同时合并多个分支:所谓的章鱼合并。请注意,章鱼合并必须在没有冲突的情况下成功。尽管如此,这可能是有用的。

HTH。

票数 103
EN

Stack Overflow用户

发布于 2017-12-13 06:10:38

重基和樱桃-挑选是你保持干净提交历史的唯一方法。避免使用合并和避免创建合并冲突。如果你正在使用格瑞特设置一个项目合并,如有必要和一个项目的樱桃挑选模式,并尝试自己。

票数 -17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1241720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档