Как проверить слияние без фактического слияния

Есть ли способ моделирования git merge между двумя ветвями, текущей рабочей ветвью и мастером, но без каких-либо изменений?

У меня часто возникают конфликты, когда я должен сделать git merge. Есть ли способ моделирования слияния в первую очередь?

Ответ 1

Я не думаю, что есть способ имитировать то, что произойдет, пока вы не попробуете слияние. Однако, если вы убедитесь, что вывод git status пуст, прежде чем вы выполните слияние, вполне можно просто пойти и попробовать. Если у вас возникли конфликты, вы можете сразу вернуться к состоянию, в котором вы были раньше:

git reset --merge

Так как git 1.7.4, вы также можете прервать слияние, выполнив:

git merge --abort

(Как сообщение о фиксации, которое добавило эту опцию,, это было добавлено для согласованности с git rebase --abort и т.д.)

Ответ 2

Вы можете использовать git merge --no-commit, чтобы предотвратить фактическое выполнение слияния, и если вам не нравится, как работает слияние, просто reset в исходную голову.

Если вы определенно не хотите завершать слияние, даже если это ускоренная перемотка вперед (и, следовательно, не имеет конфликтов, по определению), вы также можете добавить --no-ff.

Ответ 3

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

git checkout master
git checkout -b trial_merge
git merge topic_branch

После завершения слияния легко увидеть консолидированное изменение от мастера

git diff master

По завершении просто удалите ветвь trial_merge

git checkout master
git branch -D trial_merge

Таким образом, ветвь мастера никогда не изменяется.

Ответ 4

Недавно я смог использовать git merge --abort. Однако это можно использовать только в случае конфликта слияния. Если вы уверены, что вам не захочется совершать, используйте другие упомянутые выше методы.

Ответ 5

Я использую:

git merge --ff-only

согласно документация:

Откажитесь от слияния и выхода с ненулевым статусом, если текущая HEAD уже обновлена ​​или слияние может быть разрешено как ускоренная перемотка вперед.

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

Ответ 6

Почему бы просто не создать ветвь throwaway (git checkout -b) и выполнить там тестовое слияние?