将合并提交重写为squash合并提交

Mar*_*arc 7 git merge git-svn squash

我合并了一个长期存在的分支,由于冲突的解决,我花了很多时间来完成合并.

我发现我无法发布我的工作git-svn:git svn rebase将重新绑定合并分支的所有提交,而不是提交一个单独的合并提交.我发现git merge --squash有点太晚了......

是否有可能将合并提交(rebase interractive?)更改为"squash merge"提交而不会丢失已经完成的所有冲突解决工作(即没有触发新的合并,因为我没有启用该rerere工具)?

Ste*_*oss 9

如果您已将 and 与git merge( --no-ff)合并并希望将其转换为 a 的等效项git merge --squash,则可以使用以下过程(假设合并提交是分支上的最新提交):

  • 确保您已检出受影响的分支。
  • git reset --hard HEAD~1 (在合并之前将分支重置为提交。别担心,它没有丢失!)
  • git cherry-pick -m 1 HEAD@{1} (樱桃挑选你刚刚删除的合并提交作为正常提交,基于它和这个分支之间的差异)

除了保留在合并期间完成的任何冲突解决之外,它还将保留原始合并提交信息(消息、作者、日期等),这对于修复来自 BitBucket 等生成一致提交消息的工具的错误合并非常有用。

我们有一个仅限壁球提交的策略,所以当有人不小心从 BitBucket PR 中选择了正常的合并选项时,我最终会偶尔使用它。或者单击 Slack BitBucket 机器人上令人沮丧的“合并”按钮,该按钮不会为您提供合并策略的选择...


vil*_*lla 7

也许git rebase --preserve-merges对你有用.

这里详细解答了这样做时发生的事情:

git的"rebase --preserve-merges"到底是做什么的(为什么?)

请道歉,我不喜欢从那里复制和粘贴.