是否有可能在不丢失合并信息的情况下重写分支的历史记录?

Ass*_*vie 6 git

我们有一个主分支,我们已经合并了大约10个功能分支,一次一个.

所以最近的历史看起来像这样:

merged feat/10 (HEAD of master)
merged feat/9
merged feat/8
merged feat/7
merged feat/6
merged feat/5
...
Run Code Online (Sandbox Code Playgroud)

现在我们发现这feat/7很糟糕,我们想把它从主人那里拿走.恢复合并提交是不够的,因为我们根本不希望破坏的提交存在于我们的历史记录中.我们不能真正使用交互式rebase,因为这将使历史变得平坦,使其看起来好像是在一个分支上完成的,并且我们希望保留所有良好的合并历史记录.

有没有办法从分支的历史中删除特定的合并提交?

我会注意到真实的历史要比你在上面的例子中看到的要复杂得多,所以手动重新进行所有的合并,因为feat/7不是一个好的选择.

编辑

为了澄清那些投票将其作为一个副本关闭的人:这不是关于如何使用rebase进行提交的常见问题解答,当然这已被多次回答.这里的问题是关于在没有展平合并历史的情况下进行提交.

Lea*_*th2 1

如果你的历史记录目前看起来像这样,并且你没有删除分支,但你可以简单地git reset --hard HEAD~4将你的代码重置回合并到 7 之前的状态,然后你可以简单地把git merge好的分支重新加入。这是我能想到的最简单的方法我的头。

编辑: 您可以在 rebase 上使用 -p 开关来保留合并,但将此开关与 -i 一起使用可能会产生后果。检查 man git-rebase 页面并查看 BUGS 部分以查看当前的错误。

EDIT2:如果您在使用此命令之前没有采取适当的预防措施,我不承担任何责任。在阅读联机帮助页之前也不要使用它。