所以我之前做过无数次 cherry-pick ,看来我现在必须在生活中失败,我正在尝试从一个分支到另一个分支进行 cherry-pick ,这应该很容易,但我怎么会得到一个关于它的错误给出了 merge 但没有给出 -m?
$ git cherry-pick a8c5ad438f6173dc34f6ec45bddcef2ab23285e0
error: Commit a8c5ad438f6173dc34f6ec45bddcef2ab23285e0 is a merge but no -m option was given.
fatal: cherry-pick failed
看起来不对......应该是:
$ git cherry-pick a8c5ad438f6173dc34f6ec45bddcef2ab23285e0
我什么时候必须提供 -m 函数?
最佳答案
如果提交是 merge 提交,则必须提供 -m
,即具有多个父项的提交。
通常情况下,git cherry-pick REV
的作用可以描述为:
获取 rev 与其父级之间的更改。
将这些更改应用到当前 HEAD 并使用 rev 的提交消息提交结果。
merge 提交连接两条开发线。例如,一行实现小部件,另一行消除困惑。 merge 为您提供了带有小部件的代码,没有杂乱。
现在考虑 cherry-pick 过程的第 1 步:git 无法猜测您是要消除困惑还是要实现小部件。您也不能同时执行这两项操作,因为关于如何执行这两项操作的信息不包含在单个 merge 提交中,只有生成的 merge 树的内容包含在内。
-m
选项允许您告诉 git 如何进行。例如,如果杂乱删除发生在 master
上并且 merge 提交是使用 git merge WIDGET
创建的,那么 git cherry-pick -m 1 merged-commit
将挑选新的小部件,因为 merge 的树和父 1(最后一个消除困惑的提交)之间的差异将恰好是小部件的添加。另一方面,git cherry-pick -m 2 merge-commit
将消除困惑,因为父级 2(添加小部件的最后一个提交)和 merge-commit 之间的差异 正是 widget 分支中缺少的杂乱消除功能。
关于Git cherry-pick 语法和 merge 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12626754/