1

使用我们的 Git 设置,我们有以下永久分支: - Master |- Fixes-xx - Release - Develop

开发是我们的开发代码所在的地方。当我们几乎准备好“发布”时,它被合并到“发布”中,我们在最后一刻进行任何额外的更改,然后将其合并到“主”中并用版本标记它。如果在旧版本中发现错误,我们会为其创建一个单独的分支,以便可以对其进行修复并赋予相关的版本标签。

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

我想回去,最好从历史记录中删除提交,因为这不是编码错误,而是合并时完全搞砸了。但我一直在挖掘,找不到一个明确的方法来使用 rebase 来做到这一点。我找不到如何运行 rebase 来列出我要删除的提交。我们在master中犯了这个错误似乎很容易。

任何有关如何最好地从中恢复的建议表示赞赏。从那时起,这已经是几个提交,所以它们不在脑海中。

4

2 回答 2

1

您可以像使用 git reset 的任何其他提交一样撤消合并提交。例如,如果您想删除 1、2 或 3 个提交,则简写分别为git reset HEAD~1, 。git reset HEAD~2git reset HEAD~3

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

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

于 2012-07-06T04:34:56.917 回答
0

我想我的答案就在这里 -恢复合并所做的更改

它没有提到变基。对于这种情况,也许 rebase 是不可能的。

于 2012-07-06T04:30:00.273 回答