Как проверить слияние без фактического слияния - PullRequest
147 голосов
/ 20 сентября 2011

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

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

Ответы [ 7 ]

125 голосов
/ 20 сентября 2011

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

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

119 голосов
/ 20 сентября 2011

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

git reset --merge

Начиная с git 1.7.4, вы также можете прервать объединение, выполнив:

git merge --abort

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

93 голосов
/ 17 февраля 2014

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

git checkout master
git checkout -b trial_merge
git merge topic_branch

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

git diff master

Когда это будет сделано, просто удалите ветвь trial_merge

git checkout master
git branch -D trial_merge

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

4 голосов
/ 30 августа 2016

Я использую:

git merge --ff-only

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

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

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

4 голосов
/ 09 сентября 2013

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

3 голосов
/ 16 июня 2017

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

0 голосов
/ 14 июня 2018

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

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

В этом случае хороший способчтобы узнать, какие изменения вы внесли (не что иное из слияний), используя Sourcetree.

Необходимо щелкнуть правой кнопкой мыши на базовой ветви и выбрать Diff Against Current:

Sourcetree's feature to know the diff between two branches

Тогда sourcetree покажет вам все модификации, которые будут объединены, если вы объедините вашу ветку с базовой веткой.

Results

Конечно, это не покажет вам конфликты, но это полезный инструмент в слияниях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...