git cherry-pick 说 "...38c74d is a merge but no -m option was given"

标签 git merge rebase cherry-pick git-cherry-pick

我在我的 master 分支中做了一些更改,并想将它们带到上游。当我挑选以下提交时。但是,我在 git 说的 fd9f578 上卡住了:

$ git cherry-pick fd9f578
fatal: Commit fd9f57850f6b94b7906e5bbe51a0d75bf638c74d is a merge but no -m option was given.

git 试图告诉我什么,cherry-pick 是否适合在这里使用? master 分支确实包含对上游分支中已修改的文件的更改,因此我确定会有一些 merge 冲突,但这些冲突并不太糟糕,无法理顺。我知道哪些地方需要进行哪些更改。

这些是我想带到上游的提交。

e7d4cff added some comments...
23e6d2a moved static strings...
44cc65a incorporated test ...
40b83d5 whoops delete whitspace...
24f8a50 implemented global.c...
43651c3 cleaned up ...
068b2fe cleaned up version.c ...
fd9f578 Merge branch 'master' of ssh://extgit/git/sessions_common
4172caa cleaned up comments in sessions.c ...

最佳答案

cherry-pick 的工作方式是获取变更集所代表的差异(此时的工作树与其父级的工作树之间的差异),并将其应用于当前分支。

因此,如果一个提交有两个或多个父项,它也代表两个或多个差异 - 应该应用哪一个?

您正在尝试挑选 fd9f578,它是两个父代的 merge 。因此,您需要使用 -m 选项告诉 cherry-pick 命令应该根据哪个差异来计算差异。例如,git cherry-pick -m 1 fd9f578 使用父 1 作为基础。

我不能肯定你的具体情况,但通常建议使用 git merge 而不是 git cherry-pick。当您挑选 merge 提交时,它会将您未指定给 -m 的父项中所做的更改所有折叠到该一次提交。你失去了他们所有的历史,并把他们所有的差异放在一起。你来电。

关于git cherry-pick 说 "...38c74d is a merge but no -m option was given",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229301/

相关文章:

git - 仅使用终端创建一个 git-repo

SVN 合并帮助 : Created branch within a trunk

git - 为什么在我的 rebase 操作中只有一次提交而不是两次发生冲突?

git - 压缩提交是否成为一种最佳实践(对于这个特定的工作流程)?

git:找到最大的提交

python - pandas - 仅更新基于 'key' 值的特定 DataFrame 列值

git - 如何在冲突的 Git rebase 中获取 "their"更改?

git - 使用 git rebase 追溯地使提交落在不同的分支上?

git - CocoaPods:如何处理 pod 源中的 "fixes"以进行更新?

Mercurial:如何从存储库中仅导入部分变更集?