git cherry-pick <commit>
命令是什么意思?
在Git中,Cherry-picking指的是从一个分支中选择一个提交并将其应用到另一个分支。
这与其他方式(如merge
和rebase
)形成对比,后者通常将许多提交应用到另一个分支。
也可以挑选多个提交,但merge
是优先于Cherry-picking的方法。
N.B.:
如果你从公共分支中挑选某些提交,你应该考虑使用
git cherry-pick -x <commit-hash>
这将生成一个标准化的提交信息。这样,你(和你的同事)仍然可以跟踪提交的来源,并可能避免未来的合并冲突。
如果你在提交中附有注释,它们不会随着 cherry-pick 被复制。要同时复制它们,你必须使用:
git notes copy <from> <to>
其他链接:
git cherry-pick
命令能够带来我的提交信息。你说的是别的事情吗?我根本不需要运行 git notes
命令就可以完成它。 - RBT-x
选项的目的:
在记录提交时,在原始提交消息中附加一行,以指示此更改是从哪个提交中挑选出来的,该行将显示为“(cherry picked from commit …)”。 https://git-scm.com/docs/git-cherry-pick - Loner这段引用来自:《使用 Git 进行版本控制》
git cherry-pick
命令会将指定的提交所带来的更改应用到当前分支上,并生成一个新的、独立的提交。 严格来说,使用git cherry-pick
不会改变存储库中现有的历史记录,而是会向其中添加新的内容。和其他通过应用 diff 来引入更改的 Git 操作一样,你可能需要解决冲突才能完全应用给定提交中的更改。通常情况下,git cherry-pick
命令被用来将某个分支中的特定提交合并到另一个分支中。一个常见的用法就是将维护分支(maintenance branch)中的提交前移或后移到开发分支(development branch)。
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, below
之前:
之后:
此外,这里有一个非常好的实际操作视频教程: Youtube: Git cherry-pick介绍
Git中的摘樱桃(cherry picking)旨在将一个分支中的某些提交应用到另一个分支中。如果您例如犯了一个错误并将更改提交到了错误的分支,但不想合并整个分支,您可以撤销提交并将其摘选到另一个分支。
使用该功能,您只需要输入git cherry-pick hash
,其中hash
是其他分支中的提交哈希。
完整的操作步骤请参见:http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
L'
从用户的角度来看(提交 = 快照),是提交 L
的精确副本。” - 不,它不是相同的快照(除非快照 K 和 E 已经相同),只是相同的差异(即 E→L' = K→L)。 - Paŭlo Ebermann需要使用 cherry pick 的场景示例
考虑以下情况。您有两个分支:
a) release1 - 此分支正在向客户交付,但仍需要修复一些错误。
b) master - 经典的主分支,在此分支上可以添加例如用于 release2 的功能。
NOW 现在: 您修复了 release1 中的某个问题。 当然您还需要将此修复应用到 master 分支中。这是 cherry picking 的一个典型用例。因此,在这种情况下,cherry pick 意味着您从 release1 分支中获取一个提交,并将其包含到 master 分支中。
release1
预计稍后会合并到master
中,那么挑选可能就没有意义(依我之见)。而在挑选后,您也会想要对master1
进行变基,我想是这样。 - U. Windlcherry-pick是Git的一个功能。如果有人想将一个分支中特定的提交合并到目标分支中,则使用cherry-pick。
git cherry-pick 的步骤如下:
git cherry-pick <commit id>
这里的提交 ID 是另一个分支的活动 ID。例如:
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
您可以把 cherry-pick 想象成类似于 rebase,或者更确切地说是像 rebase 一样进行管理。这意味着它会拿取现有的提交,并以您当前所在分支的头部为起点重新生成该提交。
rebase 获取一个具有父级 X 的提交,并将该提交重新生成为实际上具有父级 Y,而这正是 cherry-pick 所做的。
Cherry pick 更多关注的是如何选择提交。使用 pull(rebase)时,Git 会自动将您本地的提交重放到所拉取的分支之上,但是使用 cherry-pick,您需要显式地选择某个提交,并隐式地将其重新生成到您当前的分支之上。
因此,操作方法存在差异,但在底层,它们非常相似——都是提交的重新生成。
cherry-pick
表现出它所做的方式。谢谢你,先生。 - Aluan Haddad它将一个特定的提交应用到您当前的分支。
这意味着:
例如:考虑提交A
added newFileA
modified main:
+ import './newFileA'
提交B
added newFileB
modified main:
+ import './newFileB'
如果您在另一个分支上挑选提交B,您最终会得到:
/newFileB
/main :
import './newFileA'
import './newFileB'
由于提交B包含newFileB和main,但没有newFileA,导致出现了一个错误,因此请谨慎使用。
这有点像从某处复制粘贴到另一个地方,但是针对特定的提交记录。
比如,如果你想进行紧急修复,你可以使用 cherry-pick
功能。
在开发分支中进行 cherry-pick
,然后将该提交合并到发布分支。同样,在发布分支中进行 cherry-pick
,并将其合并到主分支中。完成!
如果您想进行无需提交ID的合并,可以使用此命令
git cherry-pick master~2 master~0
上面的命令将合并主分支从1到3的最后三个提交记录
如果您只想对单个提交进行此操作,请删除最后一个选项
git cherry-pick master~2
这样,您将合并来自主分支末尾的第三个提交。
HEAD
上创建一个临时分支,将该提交的差异合并到其中,然后快进HEAD
。”或者简单地说:“合并单个提交”。 - U. Windl