Отмена слияния 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