樱桃挑选Git意味着什么?

问题描述 投票:1842回答:9

最近,我被要求cherry-pick提交。

那么,在git中挑选一个提交意味着什么呢?你怎么做呢?

git cherry-pick git-cherry-pick
9个回答
2337
投票

在Git中挑选Cherry意味着从一个分支中选择一个提交并将其应用到另一个分支。

这与其他方式形成对比,例如mergerebase,它们通常将许多提交应用到另一个分支上。

  1. 确保您在要应用提交的分支上。 git checkout master
  2. 执行以下操作: git cherry-pick <commit-hash>

N.B:

  1. 如果你从公共分支机构挑选,你应该考虑使用 git cherry-pick -x <commit-hash> 这将生成标准化的提交消息。这样,您(和您的同事)仍然可以跟踪提交的来源,并可能避免将来发生合并冲突。
  2. 如果您在提交中附有说明,则不遵循樱桃选择。为了把它们带过来,你必须使用: git notes copy <from> <to>

其他链接:


263
投票

这句话取自; Version Control with Git(非常棒的书,如果你对git感兴趣,我鼓励你买它)

编辑:由于这个答案仍然有印象,我想添加非常好的动作视频教程:

Youtube: Introduction to Git cherry-pick

使用git cherry-pick命令git cherry-pick commit应用当前分支上的命名提交引入的更改。它将引入一个新的,独特的提交。严格来说,使用git cherry-pick不会改变存储库中的现有历史记录;相反,它增加了历史。与通过应用diff的过程引入更改的其他Git操作一样,您可能需要解决冲突以完全应用来自给定提交的更改。命令git cherry-pick通常用于将特定提交从存储库中的一个分支引入到不同的分支上。常见的用途是从维护分支到开发分支的转发或后端提交。

$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above

之前:

后:


144
投票

Git中的Cherry挑选旨在将一个分支从一个分支应用到另一个分支。如果你这样做可以做到。犯了一个错误,并将更改提交到错误的分支,但不想合并整个分支。你可以这样。恢复提交并在另一个分支上挑选它。

要使用它,你只需要git cherry-pick hash,其中hash是来自其他分支的提交哈希。

有关完整程序,请参阅:http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html


66
投票

情况的简短例子,当你需要樱桃挑选

考虑以下场景。你有两个分支。

a)release1 - 这个分支将交给您的客户,但仍有一些问题需要修复。

b)master - 经典主分支,您可以在其中添加release2的功能。

现在:你在release1中修复了一些东西。当然你也需要在master中修复此问题。这是樱桃采摘的典型用例。因此,在这种情况下,挑选意味着您从release1分支进行提交并将其包含在主分支中。


48
投票

cherry-pick是一个Git功能。如果有人想在一个分支中将特定提交提交到目标分支,则使用cherry-pick。 git cherry-pick步骤如下。

  1. checkout(切换到)目标分支。
  2. git cherry-pick <commit id> 这里commit id是另一个branch.Eg的活动id。 git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
  3. 推到目标分支

访问https://git-scm.com/docs/git-cherry-pick


19
投票

你可以想一下,如果一个樱桃选择与一个rebase类似,或者它的管理就像一个rebase。通过这个,我的意思是它需要一个现有的提交并重新生成它,作为起点,你当前所在分支的负责人。

rebase接受具有父X的提交并重新生成提交,就像它实际上有父Y一样,这正是cherry-pick所做的。

Cherry pick更多地是关于如何选择提交。使用pull(rebase),git隐含地重新生成你的本地提交,而不是基于你的分支,但是使用cherry-pick你明确地选择一些提交,并在你当前的分支上隐式重新生成它们(它们)。

所以你这样做的方式不同,但在幕后他们是非常相似的操作 - 提交的再生。


8
投票

它有点像Copy(从某个地方)和Paste(到某个地方),但是对于特定的提交。

例如,如果要进行热修复,则可以使用cherry-pick功能。

在开发分支中执行cherry-pick,并在承诺发布分支的merge中执行此操作。同样,从发布分支到掌握执行cherry-pick。瞧


5
投票

当您与项目开发人员合作时,管理多个git分支之间的更改可能会成为一项复杂的任务。有时您不希望将整个分支合并到另一个分支,只需要选择一个或两个特定的提交。这个过程叫做'樱桃采摘'。

发现了一篇关于樱桃采摘的精彩文章,请查看深入细节:https://www.previousnext.com.au/blog/intro-cherry-picking-git


3
投票

如果要在没有提交ID的情况下进行合并,可以使用此命令

git cherry-pick master~2 master~0

上面的命令将把master的最后三次提交合并为1到3

如果您想为单次提交执行此操作,请删除最后一个选项

git cherry-pick master~2

这样,您将从master的末尾合并第3次提交。

© www.soinside.com 2019 - 2024. All rights reserved.