樱桃挑选n
提交与樱桃挑选一个接一个(使用不同的 git 调用)相同。不涉及分支或其他任何内容,只需在当前分支上为您创建新提交即可。
帮助页面https://www.git-scm.com/docs/git-cherry-pick.html说:
给定一个或多个现有提交,应用每个提交的更改,为每个提交记录一个新提交。
让我们把这句话分开:
改变
这有时也被称为“差异”。它git diff HEAD somecommit
会输出什么。有时它也被称为“补丁”(实际上,git diff
可以使用通常的patch
实用程序来应用相同的输出- 当然,git apply
但这不是这里的重点)。
因此,“更改”是指示工具(例如git
或patch
如何修改文本文件以最终生成新的、已更改的文本文件)的东西。
您可以通过diff
对两个文件运行标准实用程序来创建两个文件之间差异的类似文本表示。事实上,这就是git
内部挑选(当然有自己的差异实现)的作用;即这只是一个 2 向差异,而不是像git merge
操作中那样的 3 向差异。
每一个介绍
当你有这种状态时:
...----+----+----...
abc def
那么git cherry-pick def
改变是提交之间的差异2路abc
和def
(所有这些不同的,当然,在一个文件通过文件为基础的文件),因为这是def
“介绍”。
应用更改
这意味着采取HEAD
和“更改”(即差异、补丁等)并创建一组新的文本文件。原则上,您可以将此视为 2 路合并(就像patch
实用程序会做的那样),除非它不是,即如果diff
输出中的上下文信息与现在的内容不匹配HEAD
。在这种情况下,git 会欺骗以找到能够进行 3 向合并的共同祖先,您可以在使用 git 和 meld 进行交互式变基的 3 向合并中的三个文件是什么?. 但是,从用户的角度来看,它仍然无法与git merge
.a真正相比,因为它在结构上最终会以单亲提交,而不是像git merge
.
记录新提交
git
将更改应用于索引和工作目录,并提交。除非 2-way 合并和 3-way 合并没有冲突,否则直接从帮助页面和我的一些评论:
def
我上面的图片。]最后,句子的其余部分:
给定一个或多个现有提交,应用...为每个提交记录一个新提交。
如果你给它多个提交,可能是显式的 ingit cherry-pick sha1 sha2 sha3...
或隐式的git cherry-pick sha1..sha2
,那么上面的只是在一个简单的循环中运行,在最后一个选择之后停止,或者当发生合并冲突时。
CHERRY_PICK_HEAD ref 是什么?
2. The CHERRY_PICK_HEAD ref is set to point at the commit that introduced the change that is difficult to apply.
如果它尝试选择 commit def
,并且发生合并冲突,CHERRY_PICK_HEAD
则将指向def
。
通过运行 git cherry-pick 2^..4,git 执行的操作顺序是什么,在哪些提交之间 git 使用 diff?
如上所述:
git cherry-pick --continue
.通过运行 git cherry-pick 1..8,git 会做什么?
相同,但这次它将选择提交 2、3、4、8。
(该范围内的“第一个”提交未被选择的事实是通常的行为,例如git log 2^..4
或git log 1..8
将输出相同的提交 - 实际上与将被选择的相同。这在cherry-pick帮助页面中描述,<commits>
包括链接到 git 如何进行修订,了解所有细节。这不是git cherry-pick
这些..
范围如何工作的属性。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句