Как проверить слияние без фактического слияния
Есть ли способ моделирования 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) и выполнить там тестовое слияние?