樱桃挑选Git意味着什么?

What does cherry-picking a commit with Git mean?

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

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


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

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

  • 确保您在要应用提交的分支上。

    1
    git checkout master
  • 执行以下操作:

    1
    git cherry-pick <commit-hash>
  • N.B:

  • 如果你从公共分支机构挑选,你应该考虑使用

    1
    git cherry-pick -x <commit-hash>

    这将生成标准化的提交消息。这样,您(和您的同事)仍然可以跟踪提交的来源,并可能避免将来发生合并冲突。

  • 如果您在提交中附有说明,则不遵循樱桃选择。为了把它们带过来,你必须使用:

    1
    git notes copy <from> <to>
  • 其他链接:

    • git官方指南页面


    这句话取自;
    使用Git进行版本控制
    (真的好书,如果你对git感兴趣,我鼓励你买它)

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

    Youtube:Git樱桃挑选简介

    Using git cherry-pick The command git cherry-pick commit applies the
    changes introduced by the named commit on the current branch. It will
    introduce a new, distinct commit. Strictly speaking, using git
    cherry-pick doesn’t alter the existing history within a repository;
    instead, it adds to the history. As with other Git operations that
    introduce changes via the process of applying a diff, you may need to
    resolve conflicts to fully apply the changes from the given commit .
    The command git cherry-pick is typically used to introduce particular
    commits from one branch within a repository onto a different branch. A
    common use is to forward- or back-port commits from a maintenance
    branch to a development branch.

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

    之前:
    before

    后:
    after


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

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

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


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

    Consider following scenario. You have two branches.

    a) release1 - This branch is going to your customer, but there are
    still some bugs to be fixed.

    b) master - Classic master branch, where you can for example add
    functionality for release2.

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


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

  • checkout(切换到)目标分支。
  • 1
    git cherry-pick <commit id>

    这里commit id是另一个branch.Eg的活动id。

    1
    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
  • 推到目标分支
  • 访问https://git-scm.com/docs/git-cherry-pick


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

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

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

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


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

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

    在开发分支中执行cherry-pick,并将merge提交到发布分支。同样,从发布分支到主服务器执行cherry-pick。瞧


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

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


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

    1
    git cherry-pick master~2 master~0

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

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

    1
    git cherry-pick master~2

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