Git rebase 忽略合并提交

gar*_*may 4 git

我想将这四个提交消息压缩为一个。更改已经推送。

...95c2f Merge branch 'bugfix/final' of ssh://10.0.0.30:7999/mp/web into bugfix/final
...39e3c Merge branch 'version/I2-0' of ssh://10.0.0.30:7999/mp/web into bugfix/final
...cf444 Merge branch 'version/I2-0' of ssh://10.0.0.30:7999/mp/web into bugfix/final
...43d9d C0-235, CO-236, CO-215, CO-340, CO-367, CO-368 mobile order depth etc,etc...
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用下面的方法进行变基,它会忽略所有合并提交消息。

git rebase -i HEAD~4
Run Code Online (Sandbox Code Playgroud)

我如何才能实现相同的目标以及为什么忽略合并提交。

ana*_*ocs 11

Git(2.25.0 版本 1/13/2020 以及可能更早版本)开始,该标志--preserve-merges已弃用。

Git CLI 现在建议您使用: --rebase-merges-r简称

交互式变基的用法示例:

git rebase -i --rebase-merges HEAD~4
Run Code Online (Sandbox Code Playgroud)

查看文档以获取更多信息:

--rebase-merges[=(rebase-cousins|no-rebase-cousins)]

默认情况下,变基只会从待办事项列表中删除合并提交,并将变基提交放入单个线性分支中。使用 --rebase-merges 时,变基将通过重新创建合并提交来尝试保留要变基的提交中的分支结构。这些合并提交中任何已解决的合并冲突或手动修改都必须手动解决/重新应用。

默认情况下,或者当指定 no-rebase-cousins 时,没有直接祖先的提交将保留其原始分支点,即被 git-log[1] 的 --ancestry-path 选项排除的提交将默认保留其原始血统。如果打开 rebase-cousins 模式,则此类提交将重新基于(或 ,如果指定)。

--rebase-merges 模式在本质上与已弃用的 --preserve-merges 类似,但适用于交互式变基,其中提交可以随意重新排序、插入和删除。

目前只能使用递归合并策略重新创建合并提交;不同的合并策略只能通过显式 exec git merge -s [...] 命令来使用。

来源: https: //git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---rebase-mergesrebase-cousinsno-rebase-cousins


ste*_*web 9

您是否尝试过变基和保留合并?假设您希望在重新定位后维护合并提交。

请尝试以下操作:

git rebase -i -p HEAD~4
Run Code Online (Sandbox Code Playgroud)


小智 -2

合并提交确实没有显示,但它们确实存在。必须有一个更干净的解决方案,但我记得仍然通过变基解决了这个问题(例如,您可以尝试推送一个空提交并用它变基),即使没有显示,合并的提交也将包含在变基中