Отмена мерзавца слияния - PullRequest
10 голосов
/ 19 января 2011

У меня нет такого опыта работы с Git, и теперь у меня большие проблемы с падением на колени.

Вот как выглядит моя текущая ветка:

feature       /---F1-----F2----\
             /                  \
master -----M0-----M1-----M2-----M3-----M4
             \                        /
bugfix        \--B1-----B2-----------/

Ситуация:

Кто-то сделал очень плохую вещь и запустил действительно плохое слияние (M3). Я заметил только плохое слияние, когда наши модели (не исходный код) не загружались после слияния B1 и B2 в M4. К счастью, я еще не нажал M4.

Проблема:

Как мне снова все исправить? Я хочу M0, M1, M2, F1, F2, B1 и B2. Но я не хочу M3 и M4 (поскольку M4 явно сломан). Если у меня есть , чтобы отказаться от изменений, то F1 и F2 могут быть принесены в жертву:)

Я посмотрел на git revert, но я не уверен, что полностью понимаю, как это работает. Итак ... Я очень надеюсь на помощь в том, как решить эту проблему.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 19 января 2011

Итак, чтобы уточнить, что вы хотите, это так, верно?

feature       /---F1-----F2
             /                 
master -----M0-----M1-----M2
             \            
bugfix        \--B1-----B2

Убедитесь, что HEAD s feature и bugfix по-прежнему включены F2 и B2 соответственно.

Редактировать : если feature и bugfix не являются ветвями, сделайте их ветвями (сохраните свою работу, если она не передана):

git checkout F2
git branch feature
git checkout B2
git branch bugfix

Редактировать конец

Затем сбросьте мастер до M2:

git checkout master
git reset M2 --hard

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

M3 и M4 не уничтожаются сразу, но будут в конечном итоге. Они не должны появляться в git log или gitk.

Тогда пришло время объединить feature и сделать M3', который является правильным.

1 голос
/ 19 января 2011

Если вы еще не нажали (не опубликовали) коммиты слияния, используйте git reset. Например. в ветке master, если ваше рабочее дерево чистое, выполните git reset --hard.

Дополнительная информация: Отменить слияние Git, которое еще не было передано

Если вы опубликовали свои изменения, возможно, вы захотите вместо этого сделать возвратный коммит. Больше информации здесь: http://progit.org/2010/03/02/undoing-merges.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...