通过我们的Git设置,我们拥有以下永久分支机构: - 师父 | - Fixes-x.x - 发布 - 开发
开发是我们的开发代码所在。当我们几乎准备好“发布”时,它会合并到“发布”中,我们会在将其合并到“master”之前进行任何额外的最后一分钟更改,并使用版本标记它。如果在旧版本中发现错误,我们会为它创建一个单独的分支,以便可以修复它并给出相关的版本标记。
我犯了一个新手错误,我无意中将一些实验代码合并到了发布版本(基于开发版),然后一个同事在发布合并到修复分支后不久发生了类似的错误。因此,发布和修复几乎是我们开发分支的副本。
我想回去,最好是删除历史记录中的提交,因为这不是编码错误,而是合并时的完全混乱。但我一直在挖掘,无法通过rebase找到明确的方法。我找不到如何运行rebase来列出我想要删除的提交。如果我们在主人身上犯了这个错误,那似乎很容易。
对于如何最好地从中恢复的任何建议表示赞赏。从那时起,这些都是一些提交,所以他们不在头脑中。
答案 0 :(得分:1)
您可以使用git reset撤消任何其他提交的合并提交。例如,如果您要删除1,2或3次提交,则速记分别为git reset HEAD~1
,git reset HEAD~2
,git reset HEAD~3
。
到目前为止,您将编辑本地提交树。如果要更新远程服务器,则必须执行git push --force
(请注意,force
标志可能是更多问题的根源。)
由于其他开发人员可能已经解决了有问题的提交,因此有可能由于您将更改远程服务器中的分支头引用,因此他们的git客户端会丢失其跟踪。因此,他们再次获得一致副本的最简单方法是再次git clone
回购。这就是为什么你应该避免使用--force
标志的原因。当然还有很多其他解决方案可以避免再次克隆所有内容。但是他们更难以解释并依赖于特定的情况。
答案 1 :(得分:0)
我想我的答案就在这里 - Revert back changes made by merge
它没有提到rebase。对于这种情况,也许不可能出现反转。