Alexandroppolus
@Alexandroppolus
кодир

Как разрулить конфликт из командной строки?

Суть:
git checkout branch_a
git merge branch_b


теперь у меня в файле x.js есть вот такие хреновины
<<<<<<< HEAD
text1
=======
text2
>>>>>>> branch_b


и я точно знаю, что для этого файла мне надо просто выбрать вариант, например, из branch_b (т.е. удалить text1 и оставить text2)

вручную открывать файл и возиться с уголками лень, можно ли какой-то консольной командой?
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
#отменить неудачное слияние
git merge --abort
# повторить слияние используя опцию theirs
git merge -Xtheirs branch_b 
# при конфликтах выберется вариант из вливаемой ветки

Но это не точно. Я вечно путаю ours и theirs )) Советую почитать в нашей книжке про типы слияний

По умолчанию, когда Git при слиянии веток замечает конфликт, он добавляет в код маркеры конфликта, отмечает файл как конфликтующий и позволяет вам разрешить его. Если же вместо ручного разрешения конфликта вы хотите, чтобы Git просто использовал какую-то определённую версию файла, а другую игнорировал, то вы можете передать команде merge одну из двух опций -Xours или -Xtheirs.

В этом случае Git не будет добавлять маркеры конфликта. Все неконфликтующие изменения он сольёт, а для конфликтующих он целиком возьмёт ту версию, которую вы указали (это относится и к бинарным файлам).


возиться с уголками лень

Всем лень. Поэтому используют merge tools которые помогают разбираться с «уголками» в один клик.

conflict-solver--base-changes-03906ff6.png

Либо сразу во всём файле выбрать какой-то один вариант и разрешить конфликты в пользу одной стороны.
resolve-dialog.png

Если хочется сделать это именно из командной строки, то делается это так.
git checkout branch_b -- имя_файла # оставить версию файла из ветки branch_b
git add имя_файла # сбросить состояние конфликта
# ... разрешить другие конфликты
git merge --continue --no-edit # создать коммит слияния
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Zhbert
@Zhbert
Technical Writer, Linux user
Ну можно натравить на эти «уголки» sed, например. Но это путь неправильный, конфликты надо разруливать с умом и руками ИМХО, иначе потом это аукнется еще скорее всего.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы