Git объединить, затем вернуться, затем вернуться назад - PullRequest
7 голосов
/ 24 марта 2011

Итак, мы получили ветвь git в сложное состояние:

Две ветви: <pre>* master * other_branch

На прошлой неделе кто-то случайно слил other_branch (преждевременно) с мастером и выдвинулк происхождению.Мы заметили ошибку, и я, по своей наивности, обязался <pre> git revert bad_merge_commit

«исправить» проблему.Все выглядело хорошо, мы продолжили свою жизнь ...

Сегодня мы попытались объединить master с other_branch как шаг к приведению other_branch в master.Но мой возврат, похоже, вызвал кошмар.Когда мастер сливается с other_branch, вся (большая часть?) Работа над other_branch удаляется.Я предполагаю, что это потому, что мой возврат инструктирует об отмене всех более старых коммитов.

Конечно, сейчас многочасовые коммиты на мастере поверх моего возврата, поэтому распутывание выглядит так, как будто это может быть трудно.

Есть ли способ исправить повреждение?Могу ли я, возможно, обратиться с некоторым аргументом перебазировки и удалить два оскорбительных коммита?

Большое спасибо!

[Обновление - добавление сведений о текущем состоянии по запросу]

other_branchотделился от мастера довольно давно.Наша стандартная практика - многократно объединять master с other_branch, чтобы минимизировать накопление конфликтов (иногда мы перезагружаемся, но не в этом случае).

мастер коммитов A |Б |C |BAD_MERGE [other_branch_ @ S] |REVERT_OF_BAD |D |E |F ... HEAD

other_branch фиксирует P |Q |R |S [BAD_MERGE_FROM_HERE] |T |U |V ... HEAD

Попытка объединить мастер HEAD с other_branch HEAD вызывает проблему.

Чарльз, я сейчас пытаюсь исправить дубликат мастера, используя решение, которое вы предложилиздесь: Как удалить выбранные записи журнала фиксации из репозитория Git, сохранив их изменения? .

[/ Update]

1 Ответ

4 голосов
/ 24 марта 2011

Да, проблема в том, что отмена отменяет изменения, внесенные слиянием, но не сама слияние. Я думаю, что раздел дополнения https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html описывает возможное решение.

Этот документ также является частью Git, под Debian вы найдете его в /usr/share/doc/git-doc/howto/revert-a-faulty-merge.txt

...