Як скасувати злиття git з конфліктами


785

Я на гілці mybranch1. mybranch2роздрібнюється mybranch1і в ньому були внесені зміни mybranch2.

Потім, коли mybranch1я вже робив, git merge --no-commit mybranch2 це показує, що під час злиття були конфлікти.

Тепер я хочу відкинути все ( mergeкоманда), щоб mybranch1повернутися до того, що було раніше. Я поняття не маю, як мені це зробити.


Відповіді:


1355

Останній Git:

git merge --abort

Це намагається скинути вашу робочу копію в будь-який стан, до якого вона знаходилася до злиття. Це означає, що він повинен відновити будь-які неспроможні зміни до початку об'єднання, хоча це не завжди може зробити це надійно. Як правило, ви не повинні зливатися з непосланими змінами в будь-якому випадку.

До версії 1.7.4:

git reset --merge

Це старший синтаксис, але робить те саме, що і вище.

До версії 1.6.2:

git reset --hard

який видаляє всі невідомі зміни, включаючи безперервне злиття. Іноді така поведінка корисна навіть у новіших версіях Git, які підтримують наведені вище команди.


1
Але для старих версій git це спосіб використання
Anshul

7
Іноді все-таки потрібно використовувати git reset --mergeнавіть у більш новіших версіях. У мене виникла git merge --abortпомилка (не вносячи змін), коли це git reset --mergeуспішно (і робить правильно) в git 2.2.1.
Теодор Мердок

Я виявив, що мені потрібно зробити, git merge --abortза яким git reset --mergeстикаються, коли виникає конфлікт з автоматизацією, коли я вискакую свою скриньку.
Фараон шеф-кухаря

1
Зазвичай git merge --abortпрацює для мене, однак я опинився в ситуації, коли я перевірився в окремому стані HEAD, і в одному з моїх файлів був стан "і модифікований". Я хотів би відкинути всі і повернутися в відділення, я повинен був git reset --hard, git merge --abortсказав мені , що не було ніякого злиття з перериванням (MERGE_HEAD відсутня).
яно

Іноді git merge --abortне вдається повернути тобі попередній стан, і в цьому випадку "старший синтаксис" git reset --hardробить трюк.
Кевін Стюарт

130

Власне, варто зазначити, що git merge --abortце рівнозначно тому, git reset --mergeщо MERGE_HEADє. Про це можна прочитати в довідці git для злиття команди.

git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.

Після невдалого злиття, коли його немає MERGE_HEAD, невдале злиття може бути скасоване, git reset --mergeале не обов'язково з git merge --abort, тому вони є не лише старим, а новим синтаксисом для одного і того ж .

Особисто мені здається git reset --mergeнабагато кориснішим у повсякденній роботі.


2
Дякую, ця інформація була дуже корисною. У мене було злиття, яке почалося з git stash applyнеправильної гілки, і я git merge --abortнічого не зробив (ні MERGE_HEAD), тоді як git reset --mergeробив трюк.
геомайстер

4
Я бачив, як близько 10 людей кажуть, що git merge --abortце нова команда, git reset --mergeі я зіткнувся з тим же питанням, що і @geomaster, це було дуже корисно дякую!
Том

106

Припустимо, що ви використовуєте найновіший git,

git merge --abort

Гаразд, це не працює з 1.7.0.7 :(. Треба використовувати скинути - тверда з ним
Anshul

5

Є дві речі, які ви можете спочатку скасувати об'єднання за командою

git merge --abort

або

Ви можете тимчасово перейти до попереднього стану фіксації командою

git checkout 0d1d7fc32 

0

Джерело дерева

Якщо ви не здійснюєте злиття, просто двічі клацніть на іншій гілці (= замовлення), і коли sourcetree запитає вас про відмінення всіх змін, тоді погодиться

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.