http://progit.org/2010/03/02/undoing-merges.html

настолько опытен с 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)

Решение Вопроса

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

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

Убедитесь, чтоHEADs 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 или мерзавец

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

 Gauthier19 янв. 2011 г., 16:48
У вас действительно есть репо безmaster ветка?
 aberrant8019 янв. 2011 г., 17:30
У нас естьmaster ветка. Хорошо, теперь я понимаю, что вы имеете в виду, чтобы заставить другого парня сбросить эту ветку. Спасибо!
 aberrant8019 янв. 2011 г., 16:36
Да, вроде как, но «feature», «master» и «bugfix» на самом деле не ветки, я подозреваю, что это сбивает с толку. То есть 3 ппл совершают свои изменения в основной ветке. Один парень сделал плохое слияние и толкнул. Я вытащил плохое слияние. Теперь я хочу, чтобы исключить неудачное слияние, сохраняя при этом все индивидуальные изменения ...
 Gauthier19 янв. 2011 г., 16:43
Такfeature а такжеbugfix нет отрубей, че? Конечно, авторfeature имеет филиал в своем собственном репо. Что вам нужно сделать, это сбросить ваш мастер на M2, и спросить автораfeature сделать то же самое (но убедитесь, что он не потерял веткуfeature) и повторите слияние, на этот раз правильно. Смотрите мое обновление, если вы хотите сделать это самостоятельно.

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

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

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

Ваш ответ на вопрос