git cherry 选择一系列顺序提交,包括合并

Posted

技术标签:

【中文标题】git cherry 选择一系列顺序提交,包括合并【英文标题】:git cherry pick a range of sequently commits including merge 【发布时间】:2014-09-26 13:27:46 【问题描述】:

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

例如

在分支大师上,我想挑选从 d4fd8cad 到开发 HEAD 的更改

git cherry-pick d4fd8cad..develop

有错误

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

致命的:樱桃采摘失败

如何使用 -m 选项?

【问题讨论】:

***.com/questions/9229301/…的可能重复 你看过documentation吗? @gravetii 我认为cherry-pick 可能不会做我想要的。它会丢弃我在合并提交中未指定给 -m 的父级所做的所有更改 你想达到什么目的?交互式变基可能是更好的解决方案?您可以在开发之上的新分支中创建一个交互式基础,选择您想要的提交,然后进行快进合并以使它们进入开发。在我给你一个正确的答案之前,我需要一些关于你真正想要达到的目标的帮助。 好吧,在这种情况下,cherry-pick 并不是最好的选择。也许,从另一个问题的答案中得到提示,您可以通过合并和其他一些操作来实现您想要的? 【参考方案1】:

在这种情况下,使用交互式变基可能会更好。

要将 d4fd8cad..HEAD 从分支 develop 应用到 master,可以使用以下命令。

确保我们处于开发阶段:

git checkout develop

分支脱离开发:

git checkout -b develop-rebase

在 master 上做一个交互式 rebase。 -p 选项可让您保留合并提交。

git rebase master -i -p

删除所有在 d4fd8cad 之前提交的行。留下您想要挑选的提交。

保存变基文件。

解决冲突,如果有的话。

现在您的分支看起来与您希望您的主分支完全一样。看看gitk 来验证你是否愿意。

现在我们要做的就是将它合并到 master 中。如果这不是快进合并,则可能发生了错误,所以让我们添加 --ff-only 标志

git checkout master
git merge develop-rebase --ff-only

【讨论】:

如果您想保留合并提交,请使用 -p 选项进行变基 -p, --preserve-merges 重新创建合并提交,而不是通过重放合并提交引入的提交来展平历史。不保留合并冲突解决方案或对合并提交的手动修改。这在内部使用了 --interactive 机制,但将其与 --interactive 选项显式结合通常不是一个好主意,除非您知道自己在做什么(请参阅下面的错误)。

以上是关于git cherry 选择一系列顺序提交,包括合并的主要内容,如果未能解决你的问题,请参考以下文章

如何 git-cherry-pick 仅更改某些文件?

git 合并某个提交 git cherry-pick

git合并其中一个提交

git合并某次提交到某个分支

Cherry 选择从开发分支到部署分支的父合并提交

Git cherry-pick极速理解