撤消合并/重置更改状态

时间:2014-01-17 08:40:59

标签: git gerrit

我使用Gerrit犯了一个致命的错误,并想知道是否有人能为此提供解决方案/想法:

目前的情况是我有一个分支feature-foo,我们的团队正在推动更改以供审核。 其中一些变更已经提交/合并,还有很多变更仍在审核中。 现在,昨天我决定将一个补丁集推送到一个特定的变化,一个大约有15个变化(尚未合并)。

我不小心推过了代码审查(是的,我确实拥有这些权限,是的,我愚蠢到不为自己的安全而停用它们 - 经验教训)。 这导致将这15个更改/提交直接推送到分支而不是代码审查。 所以现在所有这些更改都在Gerrit中标记为MERGED。我的直接想法是使用我知道最初是push -f的提示的提交来feature-foo

这正确地将分支重置到它应该是的位置。但是 - 在Gerrit中,这15个变化仍然标记为MERGED。 我想要的是:我需要将这些更改恢复到“正在审核中”状态,因为它们实际上仍处于工作状态。

任何想法,任何人?我无法想象之前有人发生过这种情况......

的问候,

- 曲

编辑1 :澄清 - 错误推送的提交导致快进 - 而不是合并。尽管如此,对于Gerrit来说,这些更改/提交仍然是“合并”,好像有人在Gerrit-Web接口中按下“提交更改”。 所以 - 这个问题实际上是关于Gerrit,而不是Git本身

关键字:意外推送,意外合并

3 个答案:

答案 0 :(得分:1)

我知道的唯一方法是使用新的Change-Id再次推送它。这导致新的更改被打开。

答案 1 :(得分:0)

嗯,事实证明这就是诀窍:

  1. 将分支重置为原来的位置(强制推送代码审核)
  2. 关闭Gerrit,访问底层H2数据库并将所有受影响的Change-ID的状态重置为“正在审核”(标准SQL,在WHERE-Clause中使用项目名称,分支名称和Change-ID)。 / LI>

答案 2 :(得分:0)

更新 Gerrit 3+(使用 NoteDB):

当提交更改(或者甚至只是推送它,显然)时,Gerrit 会为更改创建一个新的补丁集,它带有“合并”属性。这需要撤消。

对于变更集 12345,您需要查看 refs/changes/45/12345/meta 的 git 历史记录。该“分支”包含对变更集的讨论。

通过将该分支重置为提交前的最后一次提交(提交应具有类似“创建补丁集 2”的消息,带有属性“状态:已合并” - 取其父),您将删除更改具有的所有知识曾经被合并过。

可能也必须刷新缓存 - 我只是在 SSH 界面上执行了“gerrit flush-caches --all”以确保。