Есть ли способ разрешить конфликт для всех файлов с помощью 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.