选择与 Git 进行提交意味着什么?

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

那么在 git 中选择提交是什么意思呢?你怎么做呢?

答案

在 Git 中进行 Cherry 采摘意味着从一个分支中选择一个提交,然后将其应用于另一个分支。

这与其他方式如对比度mergerebase通常应用于许多提交到另一个分支。

  1. 确保您位于要应用提交的分支上。

    git checkout master
  2. 执行以下命令:

    git cherry-pick <commit-hash>

注意:

  1. 如果您是从公共分支机构摘樱桃,则应考虑使用

    git cherry-pick -x <commit-hash>

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

  2. 如果您在提交内容上附加了笔记,则不要遵循这些提示。要将它们也带过来,您必须使用:

    git notes copy <from> <to>

附加链接:

引用来自: 使用 Git 进行版本控制 (非常不错的书,如果您对 git 感兴趣,我建议您购买它)

编辑:由于此答案仍然令人印象深刻,我想在此视频教程中添加一个非常好的内容:

Youtube:Git 樱桃简介

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

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

之前: 之前

后: 后

Git 中的 Cherry picking 旨在将某个分支中的某些提交应用于另一分支。如果您愿意,可以做到。犯了一个错误,并将更改更改为错误的分支,但是不想合并整个分支。您可以例如。恢复提交,然后在另一个分支上进行选择。

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

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

需要摘樱桃的情况的简短示例

考虑以下情形。您有两个分支。

a)版本1-该分支将交付给您的客户,但仍有一些错误需要修复。

B) - 经典主分支,在那里你可以为 release2 例如添加功能。

现在 :您可以在release1 中修复某些问题 。当然,您也需要在master 中进行此修复。这是樱桃采摘的典型用例。因此,在这种情况下选择樱桃意味着您从release1分支中进行提交,并将其包括在master分支中。

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

  1. 签出(切换到)目标分支。
  2. git cherry-pick <commit id>

    这里的提交 ID 是另一个分支的活动 ID。

    git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
  3. 推送到目标分支

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

您可以考虑,如果选择的樱桃类似于重新设定,或者像重新设定一样进行管理。我的意思是,它需要一个现有的提交,并以您当前所在分支的头作为起点来重新生成它。

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

Cherry Pick 更多有关如何选择提交的信息。使用pull (rebase),git 会在被拉到分支的顶部隐式地重新生成本地提交,但是使用cherry-pick显式地选择一些提交,并在当前分支的顶部隐式地重新生成它们。

因此,您的操作方式有所不同,但是在幕后,它们是非常相似的操作 - 提交的重新生成。

我准备了分步演示的插图, 摘樱桃也做了这些动画的插图 (接近尾声)。

  1. 摘樱桃之前
    (我们将从分支feature中对提交L 进行挑选 ): 在此处输入图片说明

  1. 启动命令git cherry-pick feature~2
    feature~2是之前的第二次提交
    feature ,即提交L ): 在此处输入图片说明

  1. 执行命令后( git cherry-pick feature~2 ): 在此处输入图片说明

相同的动画: 在此处输入图片说明


注意:

从用户的角度来看 ,提交L' (提交 = 快照)是提交L的确切副本。
从技术上(内部)来说,这是一个新的不同的提交(因为例如L包含指向K指针,而L'包含指向E指针)。

有点像复制(从某处)和粘贴(到某处),但是用于特定的提交。

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

做你的cherry-pick的开发分支,并merge该承诺发布分支。同样,从发布分支到主分支进行cherry-pick 。沃伊拉

当您与项目团队的开发人员一起工作时,管理多个 git 分支之间的更改可能会成为一项复杂的任务。有时,您不想将整个分支合并到另一个分支中,只需要选择一个或两个特定的提交即可。此过程称为 “樱桃采摘”。

在关于采摘樱桃的文章中找到了很棒的文章,请查看其详细信息: https : //www.previousnext.com.au/blog/intro-cherry-picking-git

如果要合并而没有提交 ID,则可以使用此命令

git cherry-pick master~2 master~0

上面的命令将从 1 到 3 合并 master 的最后三个提交

如果要对单个提交执行此操作,只需删除最后一个选项

git cherry-pick master~2

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