Может ли git сказать, будет ли слияние конфликтовать без фактического слияния?

Возможно ли узнать, будет ли слияние конфликтом или нет, не касаясь рабочего дерева? Я не хочу прикасаться к рабочему дереву, потому что я не хочу его проверять. Это займет много времени, если я хочу увидеть эту информацию для нескольких ветвей.

Ответ 1

Я предполагаю, что вы просто хотите узнать, как много проблем вы получаете до того, как на самом деле попытаетесь слить... и сбросить до последнего коммита после неудачного слияния относительно легко, поэтому я бы не стал удивлен, если это намеченный подход.

Тем не менее, если вы действительно не хотите прикасаться к существующим файлам в рабочем дереве, вы можете создать патч и протестировать его против целевой ветки. Это также позволяет точно показать, какие изменения были внесены в файлы - просто откройте файл исправления в текстовом редакторе.

git checkout -b mycrazybranch
[change some stuff...]
git add .
git commit -m "changed some stuff"
git format-patch master --stdout > crazy.patch
git checkout master
git apply crazy.patch --check
[all good! cleanup...]
rm crazy.patch

Как вы можете видеть, это создаст файл исправления, затем вы можете проверить его с помощью --check и посмотреть, есть ли какие-либо ошибки, а затем удалить файл исправления.

Ответ 2

Вы можете сделать git merge --abort, увидев конфликты.

Ответ 3

В качестве резюме существующих ответов, есть два способа проверить, будут ли конфликты слияния

git format-patch $(git merge-base branch1 branch2)..branch2 --stdout | git apply --3way --check -

Обратите внимание, что ваша текущая ветвь должна быть branch1 когда вы запускаете команду выше

По-другому:

git merge --no-commit branch2
# check the return code here
git merge --abort

Ответ 4

Не совсем так. Но вы можете использовать параметр -no-commit, поэтому он не автоматически фиксирует результат после слияния. Таким образом, вы можете проверить и, при желании, отменить слияние, не входя в дерево фиксации.