git cherry-pick一系列连续的提交,包括合并

5

我可以挑选一系列连续的提交。

例如

在主分支上,我想要从d4fd8cad到develop的HEAD挑选更改

git cherry-pick d4fd8cad..develop

出现错误

错误:提交885c9e07264ac6b5d3960...是一个合并,但没有给出-m选项。

致命错误:cherry-pick失败

如何使用-m选项?


2
可能是 https://dev59.com/pGox5IYBdhLWcg3waziQ 的重复问题。 - gravetii
1
你想要达到什么目标?使用交互式 rebase 可能是一个更好的解决方案。你可以在 develop 分支上创建一个新分支,并进行交互式的 rebase 操作,选择你想要的提交,然后执行 fast forward 合并将它们合入 develop 分支。在我给出正确答案之前,我需要一些关于你实际想要实现的帮助。 - Andreas Løve Selvik
那么,在这种情况下,挑选并不是最好的选择。也许,从另一个问题的答案中得到一些提示,你可以通过仅进行合并和其他几个操作来实现你想要的结果? - gravetii
@Lionleaf 我想将分支develop中的提交d4fd8cad..HEAD应用到master分支上,而在d4fd8cad和HEAD之间存在合并提交。 - Venus
@Lionleaf,交互式变基是一个好主意。 - Venus
显示剩余2条评论
1个回答

3
在这种情况下,最好使用交互式变基。
要将develop分支的d4fd8cad..HEAD应用到master分支上,您可以使用以下命令。
确保我们正在develop分支中:
git checkout develop

从develop分支分出:
git checkout -b develop-rebase

在主分支上进行交互式变基。选项-p可以保留合并提交记录。
git rebase master -i -p

删除所有d4fd8cad之前的提交行,只保留你想要的cherrypick提交行。
保存rebase文件。
如有冲突,请解决冲突。
现在你有一个分支,看起来和你想要的主分支一模一样。 在gitk中查看以验证是否符合预期。
现在我们只需要将此分支合并到主分支中。 如果这不是一个快进合并,可能出了一些问题,因此让我们添加--ff-only标志。
git checkout master
git merge develop-rebase --ff-only

1
如果你想保留合并提交记录,可以使用带有 -p 选项的变基操作。 - martin
1
-p,--preserve-merges 重新创建合并提交,而不是通过重放提交来扁平化历史记录。合并冲突解决或手动修改合并提交不会被保留。这在内部使用--interactive机制,但明确将其与--interactive选项组合使用通常不是一个好主意,除非您知道自己在做什么(请参见下面的BUGS)。 - Sergei Krivonos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接