Задать вопрос
Alexandroppolus
@Alexandroppolus
кодир

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

Суть:
git checkout branch_a
git merge branch_b


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


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

вручную открывать файл и возиться с уголками лень, можно ли какой-то консольной командой?
  • Вопрос задан
  • 395 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • ProductStar
    Python + Flask + Git: веб-разработка с нуля
    2 месяца
    Далее
  • Учебный центр IBS
    DEV-007 Введение в систему контроля версий Git
    1 неделя
    Далее
  • Stepik
    Git (система контроля версий)
    1 неделя
    Далее
Решения вопроса 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, например. Но это путь неправильный, конфликты надо разруливать с умом и руками ИМХО, иначе потом это аукнется еще скорее всего.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
Made In Dream Санкт-Петербург
от 100 000 до 220 000 ₽
от 250 000 до 320 000 ₽