Есть ли способ разрешить конфликт для всех файлов с помощью checkout --ours и --theirs? Я знаю, что вы можете сделать это для отдельных файлов, но не смогли найти способ сделать это для всех.
Git разрешить конфликт с использованием --ours/- их для всех файлов
Ответ 1
Просто grep через рабочий каталог и отправьте результат через команду xargs:
grep -lr '<<<<<<<' . | xargs git checkout --ours
или
grep -lr '<<<<<<<' . | xargs git checkout --theirs
Как это работает: grep будет искать каждый файл в текущем каталоге (.) и подкаталоги рекурсивно (флаг -r), который ищет маркеры конфликтов (строка '< < < < < < lt; < < < ')
флаг -l или --files-with-matches заставляет grep выводить только имя файла, в котором была найдена строка. Сканирование останавливается после первого совпадения, поэтому каждый согласованный файл выводится только один раз.
Соответствующие имена файлов затем > > xargs, утилита, которая разбивает каналы входной поток в отдельные аргументы для git checkout --ours или --theirs
Подробнее по этой ссылке.
Так как было бы очень неудобно вводить это каждый раз в командной строке, если вы часто используете его, может быть неплохо создать alias для вашей оболочки выбора: Bash является обычным.
Этот метод должен работать как минимум Git версии 2.4.x
Ответ 2
Вы можете -Xours или -Xtheirs с помощью git merge. Итак:
- прервать текущее слияние (например, с
git reset --hard HEAD) - слияние с использованием предпочтительной стратегии (
git merge -Xoursилиgit merge -Xtheirs)
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: конечно, вы можете выбрать только один вариант: -Xours или -Xtheirs, используйте другую стратегию, вы должны, конечно, идти файл по файлу.
Я не знаю, есть ли способ для checkout, но я честно не думаю, что это очень полезно: выбор стратегии с помощью команды checkout полезен, если вам нужны разные решения для разных файлов, иначе просто подход стратегии слияния.
Ответ 3
git checkout --[ours/theirs] . будет делать то, что вы хотите, до тех пор, пока вы находитесь в корне всех конфликтов. ours/theirs влияет только на несвязанные файлы, поэтому вам не обязательно иметь проблемы с grep/find/etc.
Ответ 4
git diff --name-only --diff-filter=U | xargs git checkout --theirs
Кажется, нужно выполнить эту работу. Обратите внимание, что для достижения этой цели вы должны быть cd'ed в корневой каталог репозитория git.