Git cherry-pick 语法和 merge 分支

标签 git cherry-pick git-cherry-pick

所以我之前做过无数次 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 的作用可以描述为:

  1. 获取 rev 与其父级之间的更改。

  2. 将这些更改应用到当前 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/

相关文章:

git log <filename> 不显示提交,但 git log 显示编辑文件的提交

git - checkout 到名称中包含 '&' 的分支

javascript - 将 git show 输出转换为条目对象和对应的路径树对象

git - git cherry-pick 的 TFVC 中的等价物是什么

git - 我如何从一个 fork 的 repo 中制作一个 PR,只针对某些文件,但对它们进行所有提交?

git 从 pull 请求中删除提交

git - 未跟踪的文件 - 是否有交互模式来处理它们?

TFS 分支和合并策略

git cherry-pick -x 默认值

git 在将更改推送到远程分支时说一切都是最新的