Я знайшов гарне пояснення для того, як повернути Злиття з цього посилання, і я скопіював вкладене пояснення нижче, і було б корисно про всяк випадок, якщо посилання нижче не працює.
Як відновити несправне злиття
Алан (alan@clueserver.org) сказав:
У мене є майстер відділення. У нас є відгалуження того, над чим працюють деякі розробники. Вони стверджують, що вона готова. Ми об'єднуємо його в головну гілку. Це щось порушує, тому ми повертаємо злиття. Вони вносять зміни в код. вони дістають це до того моменту, коли кажуть, що це нормально, і ми знову зливаємось. Перевіряючи, ми виявляємо, що зміни коду, внесені до відновлення, не в головній гілці, а зміни коду після того, як у головній гілці. і попросив допомоги видужати від цієї ситуації.
Історія відразу після "відновлення злиття" виглядатиме так:
---o---o---o---M---x---x---W
/
---A---B
де A і B знаходяться на стороні розвитку, що було не так добре, M - це злиття, яке приносить ці передчасні зміни в магістраль, x - зміни, не пов'язані з тим, що зробили бічні гілки і вже зроблені на магістралі, а W - " повернення злиття M "(не виглядає ли W вниз головою?). IOW, "diff W ^ .. W" схоже на "diff -RM ^ .. M".
Таке "повернення" об'єднання може бути здійснено за допомогою:
$ git revert -m 1 M
Після того, як розробники бічної гілки виправлять свої помилки, історія може виглядати так:
---o---o---o---M---x---x---W---x
/
---A---B-------------------C---D
де C і D повинні виправити те, що було порушено в A і B, і ви, можливо, вже матимете інші зміни на магістралі після W.
Якщо об’єднати оновлену бічну гілку (з D на її кінчику), жодна з змін, внесених в А або В, не призведе до результату, оскільки їх було повернено W. Саме це побачив Алан.
Лінус пояснює ситуацію:
Повернення звичайного зобов’язання просто ефективно скасовує те, що було зроблено, і є досить простим. Але повернення комісії злиття також скасовує дані про те, що змінилася комісія, але вона абсолютно нічого не впливає на історію, яка мала об'єднання. Таким чином, злиття все ще буде існувати, і воно все ще буде розглядатися як об'єднання двох гілок разом, і майбутні злиття побачать це злиття як останнє спільне стан - і повернення, яке повернуло введене злиття, не вплине на це зовсім. Тож "повернення" скасовує зміни даних, але це дуже не так"скасувати" в тому сенсі, що він не скасовує впливу комітету на історію сховища. Тож якщо ви думаєте про "повернення" як "скасування", то ви завжди будете пропускати цю частину реверсів. Так, це скасовує дані, але ні, це не скасовує історію. У такій ситуації вам слід спочатку повернути попереднє відновлення, завдяки чому історія виглядатиме так:
---o---o---o---M---x---x---W---x---Y
/
---A---B-------------------C---D
де Y - відновлення W. Таке "повернення відновлення" може бути здійснено за допомогою:
$ git revert W
Ця історія (ігнорування можливих конфліктів між тим, що W і W..Y змінилися) було б еквівалентно тому, що взагалі немає W або Y в історії:
---o---o---o---M---x---x-------x----
/
---A---B-------------------C---D
і знову злиття бічної гілки не матиме конфлікту, що виникне внаслідок попереднього відновлення та відновлення повернення.
---o---o---o---M---x---x-------x-------*
/ /
---A---B-------------------C---D
Звичайно, зміни, внесені в C і D, все ще можуть суперечити тому, що було зроблено будь-яким із x, але це лише звичайний конфлікт злиття.