Я зіткнувся з конфліктом при злитті. Як я можу скасувати злиття?

Я використав "git pull" і виник конфлікт злиття:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

Я знаю, що інша версія файлу хороша, а моя погана, тому всі мої зміни слід скасувати. Як це зробити?

Оскільки ваш pull був невдалим, то HEAD (а не HEAD^) є останнім "дійсним" коммітом на вашій гілці:

git reset --hard HEAD

Інша частина, яку ви хочете, це дозволити їхнім змінам перевизначати ваші зміни.

Старіші версії git'а дозволяли використовувати стратегію &quo ;їхнього&quo ; злиття:

git pull --strategy=theirs remote_branch

Але відтоді це було вилучено, як пояснюється у цьому повідомленні Junio Hamano (супровідник Git'а). Як зазначено в посилання, замість цього ви повинні зробити так:

git fetch origin
git reset --hard origin
Коментарі (11)

Я думаю, що вам потрібне "перезавантаження".

Майте на увазі, що git revert означає щось зовсім інше, ніж, скажімо, vn revert - в Subversion revert відкидає ваші (нефіксовані) зміни, повертаючи файл до поточної версії з репозиторію, тоді як git revert "скасовує" комміт.

Команда git reset повинна зробити еквівалент команді vn revert, тобто відкинути ваші небажані зміни.

Коментарі (0)

У цьому конкретному випадку використання ви не хочете скасовувати злиття, а просто вирішити конфлікт у певний спосіб.

Також немає особливої потреби у скиданні і виконанні злиття з іншою стратегією. Конфлікти були правильно підсвічені git'ом, і вимога прийняти зміни іншої сторони стосується лише цього одного файлу.

Для не об'єднаного файлу в конфлікті git робить доступними загальну базу, локальну та віддалену версії файлу в індексі. (Звідси вони зчитуються для використання у інструменті 3-стороннього порівняння за допомогою git mergetool). Ви можете використовувати git show для їх перегляду.

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

Найпростішим способом вирішення конфлікту є дослівне використання віддаленої версії:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

Або, з git >= 1.6.1:

git checkout --theirs _widget.html.erb
Коментарі (3)