我使用Gerrit犯了一个致命的错误,并想知道是否有人能为此提供解决方案/想法:
目前的情况是我有一个分支feature-foo
,我们的团队正在推动更改以供审核。
其中一些变更已经提交/合并,还有很多变更仍在审核中。
现在,昨天我决定将一个补丁集推送到一个特定的变化,一个大约有15个变化(尚未合并)。
我不小心推过了代码审查(是的,我确实拥有这些权限,是的,我愚蠢到不为自己的安全而停用它们 - 经验教训)。
这导致将这15个更改/提交直接推送到分支而不是代码审查。
所以现在所有这些更改都在Gerrit中标记为MERGED
。我的直接想法是使用我知道最初是push -f
的提示的提交来feature-foo
。
这正确地将分支重置到它应该是的位置。但是 - 在Gerrit中,这15个变化仍然标记为MERGED
。
我想要的是:我需要将这些更改恢复到“正在审核中”状态,因为它们实际上仍处于工作状态。
任何想法,任何人?我无法想象之前有人发生过这种情况......
的问候,
- 曲
编辑1 :澄清 - 错误推送的提交导致快进 - 而不是合并。尽管如此,对于Gerrit来说,这些更改/提交仍然是“合并”,好像有人在Gerrit-Web接口中按下“提交更改”。 所以 - 这个问题实际上是关于Gerrit,而不是Git本身。
关键字:意外推送,意外合并
答案 0 :(得分:1)
我知道的唯一方法是使用新的Change-Id
再次推送它。这导致新的更改被打开。
答案 1 :(得分:0)
嗯,事实证明这就是诀窍:
答案 2 :(得分:0)
更新 Gerrit 3+(使用 NoteDB):
当提交更改(或者甚至只是推送它,显然)时,Gerrit 会为更改创建一个新的补丁集,它带有“合并”属性。这需要撤消。
对于变更集 12345,您需要查看 refs/changes/45/12345/meta 的 git 历史记录。该“分支”包含对变更集的讨论。
通过将该分支重置为提交前的最后一次提交(提交应具有类似“创建补丁集 2”的消息,带有属性“状态:已合并” - 取其父),您将删除更改具有的所有知识曾经被合并过。
您可能也必须刷新缓存 - 我只是在 SSH 界面上执行了“gerrit flush-caches --all”以确保。