Отмена слияния git

Я не так переживаю с 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, но я не уверен, что полностью понимаю, как это работает. Итак... Я действительно надеюсь на помощь в том, как решить эту проблему.

Спасибо заранее.

Ответ 1

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

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

Убедитесь, что HEAD feature и bugfix по-прежнему находятся на F2 и B2 соответственно.

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

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

Изменить конец

Затем reset мастер к M2:

git checkout master
git reset M2 --hard

(reset заставит вас потерять локальные изменения, запиши их, если вы этого не хотите.)

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

Затем нужно время слить feature и сделать правильный M3'.

Ответ 2

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

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

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