使用Git恢复合并的分支

时间:2012-07-06 04:14:22

标签: git branch rebase

通过我们的Git设置,我们拥有以下永久分支机构:      - 师父      | - Fixes-x.x     - 发布      - 开发

开发是我们的开发代码所在。当我们几乎准备好“发布”时,它会合并到“发布”中,我们会在将其合并到“master”之前进行任何额外的最后一分钟更改,并使用版本标记它。如果在旧版本中发现错误,我们会为它创建一个单独的分支,以便可以修复它并给出相关的版本标记。

我犯了一个新手错误,我无意中将一些实验代码合并到了发布版本(基于开发版),然后一个同事在发布合并到修复分支后不久发生了类似的错误。因此,发布和修复几乎是我们开发分支的副本。

我想回去,最好是删除历史记录中的提交,因为这不是编码错误,而是合并时的完全混乱。但我一直在挖掘,无法通过rebase找到明确的方法。我找不到如何运行rebase来列出我想要删除的提交。如果我们在主人身上犯了这个错误,那似乎很容易。

对于如何最好地从中恢复的任何建议表示赞赏。从那时起,这些都是一些提交,所以他们不在头脑中。

2 个答案:

答案 0 :(得分:1)

您可以使用git reset撤消任何其他提交的合并提交。例如,如果您要删除1,2或3次提交,则速记分别为git reset HEAD~1git reset HEAD~2git reset HEAD~3

到目前为止,您将编辑本地提交树。如果要更新远程服务器,则必须执行git push --force(请注意,force标志可能是更多问题的根源。)

由于其他开发人员可能已经解决了有问题的提交,因此有可能由于您将更改远程服务器中的分支头引用,因此他们的git客户端会丢失其跟踪。因此,他们再次获得一致副本的最简单方法是再次git clone回购。这就是为什么你应该避免使用--force标志的原因。当然还有很多其他解决方案可以避免再次克隆所有内容。但是他们更难以解释并依赖于特定的情况。

答案 1 :(得分:0)

我想我的答案就在这里 - Revert back changes made by merge

它没有提到rebase。对于这种情况,也许不可能出现反转。