Я використав "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
Я думаю, що вам потрібне "перезавантаження".
Майте на увазі, що git revert
означає щось зовсім інше, ніж, скажімо, vn revert
- в Subversion revert відкидає ваші (нефіксовані) зміни, повертаючи файл до поточної версії з репозиторію, тоді як git revert
"скасовує" комміт.
Команда git reset
повинна зробити еквівалент команді vn revert
, тобто відкинути ваші небажані зміни.
У цьому конкретному випадку використання ви не хочете скасовувати злиття, а просто вирішити конфлікт у певний спосіб.
Також немає особливої потреби у скиданні і виконанні злиття з іншою стратегією. Конфлікти були правильно підсвічені 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