Чи є спосіб вирішити конфлікт для всіх файлів за допомогою каси --oursта --theirs? Я знаю, що ви можете зробити це для окремих файлів, але не вдалося знайти спосіб зробити це для всіх.
Чи є спосіб вирішити конфлікт для всіх файлів за допомогою каси --oursта --theirs? Я знаю, що ви можете зробити це для окремих файлів, але не вдалося знайти спосіб зробити це для всіх.
Відповіді:
Просто прогляньте робочий каталог і надішліть вихід через команду xargs:
grep -lr '<<<<<<<' . | xargs git checkout --ours
або
grep -lr '<<<<<<<' . | xargs git checkout --theirs
Як це працює: grepбуде шукати кожен файл у поточному каталозі (the .) та підкаталогах рекурсивно ( -rпрапор), шукаючи маркери конфлікту (рядок '<<<<<<<')
-lабо --files-with-matchesпрапор змушує Grep виводити тільки ім'я файлу , де була знайдена рядок. Сканування припиняється після першого співпадіння, тому кожен зібраний файл виводиться лише один раз.
Потім узгоджені назви файлів переносяться на xargs , утиліту, яка розбиває потоковий вхід на окремі аргументи для git checkout --oursабо--theirs
Детальніше за цим посиланням .
Оскільки було б дуже незручно вводити це кожен раз у командному рядку, якщо ви виявите, що ви використовуєте його багато, це може бути не поганою ідеєю створити псевдонім для вашої оболонки на вибір: Bash - це звичайний .
Цей метод повинен працювати принаймні у версіях Git 2.4.x
git diff --name-only --diff-filter=U.
git status | grep both | awk '{print $3}' | xargs git checkout --[theirs|ours]. Швидше ніж привітання, якщо у вас великий проект.
CONFLICT (rename/rename): Rename "a.txt"->"c.txt" in branch "HEAD" rename "a.txt"->"b.txt" in "master"
git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 |xargs git checkout --[theirs|ours].
Ви можете -Xoursабо -Xtheirsз git mergeтакож. Так:
git reset --hard HEAD)git merge -Xoursабо git merge -Xtheirs)ВІДМОВА ВІДПОВІДАЛЬНО: звичайно, ви можете вибрати лише один варіант, -Xoursабо -Xtheirsвикористовувати іншу стратегію.
Я не знаю, чи є спосіб checkout, але я чесно не думаю, що це страшно корисно: вибір стратегії за допомогою команди оформлення замовлення корисний, якщо ви хочете різні рішення для різних файлів, інакше просто перейдіть до підходу стратегії злиття.
--theirsабо --ours-Опція git v1.9.4. Підхід був би git merge -s recursive -Xtheirs BRANCH.
--theirsі --oursне доступні ні з git 2.2.0. Або моя відповідь не була точною, або вони були доступні у старшій версії git (ця відповідь досить стара в епоху ІТ). Правильний підхід - с -X. Я відповідно
git checkout --[ours/theirs] .буде робити те, що ви хочете, до тих пір, поки ви знаходитесь в корені всіх конфліктів. наше / їхнє впливає лише на неперероблені файли, тому вам не потрібно конкретно конфліктувати / знаходити / тощо.
error: path 'foo/bar/blah' does not have our version.
git diff --name-only --diff-filter=U | xargs git checkout --theirs
Здається, виконати роботу. Зауважте, що для цього вам потрібно ввести cd'ed в кореневий каталог git repo.
У випадку, якщо хтось інший хоче просто перезаписати все з однієї гілки (скажімо, майстер) вмістом іншої, є більш простий спосіб:
git merge origin/master --strategy=ours
Дякуємо за https://stackoverflow.com/a/1295232/560114
Або навпаки, див. Чи існує "їхня" версія "git merge -s our"?
git checkout --ours -- .працює? Це.означає, що поточний каталог застосовується з кореня робочого каталогу, тому він в основному означає весь робочий каталог. Не впевнений, чи це буде працювати з--oursпрапором, і я не впевнений, як він буде обробляти конфлікти видалених чи перейменованих файлів.