Отменить слияние/сбросить статус изменения

Я сделал фатальную ошибку, используя Gerrit, и мне было интересно, может ли кто-нибудь предложить решение/идею для этого:

Текущая ситуация такова, что у меня есть ветка feature-foo, в которую наша команда отправляет изменения для проверки. Некоторые из этих изменений уже отправлены/объединены, и многие еще открыты для рассмотрения. Итак, вчера я решил применить набор исправлений к определенному изменению, имеющему около 15 предыдущих изменений (еще не объединенных).

Я случайно пропустил проверку кода (да, у меня есть эти разрешения, и да, я был достаточно глуп, чтобы не деактивировать их для собственной безопасности — урок усвоен). Это привело к тому, что эти 15 изменений/коммитов были отправлены непосредственно в ветку, а не в код-ревью. Итак, теперь все эти изменения помечены MERGED в Gerrit. Моей непосредственной идеей было сделать push -f, используя коммит, который, как я знал, изначально был вершиной feature-foo.

Это правильно сбрасывает ветку туда, где она должна была быть. Но эти 15 изменений по-прежнему отмечены MERGED в Gerrit. Что я хочу: мне нужно, чтобы эти изменения вернулись к состоянию «Проверка в процессе», потому что на самом деле они все еще работают.

Любые идеи, кто-нибудь? Я не могу представить, что это не случалось с кем-то раньше...

С уважением,

--qu

РЕДАКТИРОВАТЬ 1: Чтобы уточнить - неправильно отправленная фиксация привела к ускоренной перемотке вперед, а не к слиянию. Тем не менее, для Геррита эти изменения/коммиты по-прежнему «ОБЪЕДИНЕНЫ», как если бы кто-то нажал «Отправить изменение» в веб-интерфейсе Gerrit. Итак, этот вопрос на самом деле касается Геррита, а не самого Git.

ключевые слова: случайное нажатие, случайное слияние


person quaylar    schedule 17.01.2014    source источник
comment
возможный дубликат Отменить изменения, сделанные слиянием   -  person sehe    schedule 17.01.2014
comment
@sehe Ну - нет. Вопрос в том, как мне сообщить Герриту, что эти изменения/коммиты на самом деле не объединены. Я уже отменил неправильный толчок. Так что ветка уже сброшена. Мне просто нужно сообщить об этом Герриту...   -  person quaylar    schedule 17.01.2014
comment
Ой. Извините за отсутствие подсказки там. Иметь +1   -  person sehe    schedule 17.01.2014
comment
Вы пытались отправить изменение в удаленную ветку обзора после сброса удаленной ветки?   -  person laplasz    schedule 17.01.2014
comment
@HiB У меня нет. На самом деле я был совершенно уверен, что Геррит не позволит мне добавить еще один набор исправлений к изменению, которое уже находится в состоянии MERGED.   -  person quaylar    schedule 17.01.2014
comment
ок, тогда попробуй, так как сейчас у тебя нет ошибки   -  person laplasz    schedule 17.01.2014


Ответы (3)


Единственный способ, который я знаю, это нажать его снова, используя новый Change-Id. Это приводит к открытию нового изменения.

person StephenKing    schedule 17.01.2014
comment
Я думал об этом, но отказался от этой мысли, потому что я потерял бы всю историю обзоров (~ 10 патчсетов за коммит) :( - person quaylar; 17.01.2014
comment
Смотрите мой ответ о том, как я это решил, +1 в любом случае для вашего тоже возможное решение. - person quaylar; 28.01.2014

Что ж, оказывается, это помогло:

  1. Сбросить ветку туда, где она должна быть (принудительно протолкнуть проверку кода)
  2. Выключите Gerrit, получите доступ к базовой базе данных H2 и сбросьте статус всех затронутых идентификаторов изменений на «Проверка в процессе» (стандартный SQL, используйте имя проекта, имя ветки и идентификатор изменения в предложении WHERE).
person quaylar    schedule 28.01.2014
comment
Любые намеки на то, как на самом деле это сделать? Это все еще актуально в Gerrit 3, который IIUC по большей части перешел от баз данных SQL? - person nattgris; 29.11.2019

Обновление для Gerrit 3+ (с использованием NoteDB):

При отправке изменения (или, по-видимому, даже просто при его отправке) Геррит создает новый набор исправлений для изменения, который поставляется с объединенным атрибутом. Это нужно отменить.

Для набора изменений 12345 вам нужно проверить историю git refs/changes/45/12345/meta. Эта ветка содержит обсуждение набора изменений.

Сбрасывая эту ветку на последнюю фиксацию перед отправкой (в отправке должно быть сообщение типа «Создать набор исправлений 2» с атрибутом «Статус: объединено — взять его родителя»), вы удаляете все сведения о том, что изменение когда-либо было объединено.

Вам, возможно, также придется очищать кеши — я только что сделал gerrit flush-caches — все на интерфейсе SSH, чтобы быть уверенным.

person Patrick Georgi    schedule 26.06.2021