git cherry pick<commit>做什么?


当前回答

官方文件摘录:

给定一个或多个现有提交,对每个提交应用更改介绍,记录每个人的新提交。这需要您工作树是干净的(没有来自HEAD提交的修改)。当不清楚如何应用更改时,会发生以下情况:当前分支和HEAD指针停留在上次提交时成功制作。CHERRY_PICK_HEAD引用设置为指向引入的提交难以应用的更改。干净应用更改的路径在索引文件和工作树中。对于冲突的路径,索引文件最多记录三个版本,如如gitmerge的“TRUE MERGE”部分所述。工作树文件将包含冲突的描述通常的冲突标记是>>>>>>和>>>>>>>>。未进行其他修改。

阅读更多。。。

其他回答

官方文件摘录:

给定一个或多个现有提交,对每个提交应用更改介绍,记录每个人的新提交。这需要您工作树是干净的(没有来自HEAD提交的修改)。当不清楚如何应用更改时,会发生以下情况:当前分支和HEAD指针停留在上次提交时成功制作。CHERRY_PICK_HEAD引用设置为指向引入的提交难以应用的更改。干净应用更改的路径在索引文件和工作树中。对于冲突的路径,索引文件最多记录三个版本,如如gitmerge的“TRUE MERGE”部分所述。工作树文件将包含冲突的描述通常的冲突标记是>>>>>>和>>>>>>>>。未进行其他修改。

阅读更多。。。

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

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

我准备了一步一步的插图,樱桃树做什么,以及这些插图的动画(接近尾声)。

樱桃采摘前(我们将从分支特性中选择提交L):


启动命令git cherry pick功能~2(功能~2是之前的第二次提交特征,即提交L):


执行命令后(git cherry-pick feature~2):


相同的动画:


注:

提交L’从用户的角度来看(提交=快照)是提交L的精确副本。

从技术上讲(内部),它是一个新的、不同的提交(因为例如,L包含指向K的指针(作为其父级),而L'包含指向e的指针)。

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

git cherry-pick master~2 master~0

上面的命令将主服务器的最后三次提交从1合并到3

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

git cherry-pick master~2

这样,您将合并从master结尾的第三个提交。

此引用摘自:Git版本控制

使用gitcherry-pick命令gitcherri-pick-commit应用命名提交在当前分支上引入的更改。它会引入一个新的、不同的提交。严格来说,使用gitcherry pick不会改变存储库中的现有历史;相反,它增加了历史。与其他Git操作一样通过应用diff的过程引入更改,您可能需要解决冲突以完全应用给定提交中的更改。gitcherry-pick命令通常用于介绍从存储库中的一个分支提交到另一个分支。A.常见的用法是从维护中转发或返回端口提交分支到开发分支。

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

之前:

之后:

此外,这里有一个非常棒的视频教程:Youtube:Gitcherry-pick简介