Я не думаю, что есть способ имитировать то, что произойдет, пока вы не попробуете слияние. Однако, если вы убедитесь, что выходные данные git statusпустые перед выполнением слияния, вполне безопасно просто пойти дальше и попробовать. Если у вас возникли конфликты, вы можете немедленно вернуться в состояние, в котором вы были раньше:
git reset --merge
Начиная с git 1.7.4, вы также можете прервать слияние, выполнив:
@ Амбер отвечает точно так, как спрашивают «как имитировать слияние». использовать --no-commitнамного проще, на мой взгляд
Самирахмед
14
@samirahmed: @Amber ответил на вопрос более буквально, конечно, хотя --no-commitвы все еще меняете индекс и рабочее дерево, что не совсем «без внесения изменений» :) Я хочу сказать, что когда люди спрашивают такого рода вопрос, как правило, потому что они не знают, что лучший способ увидеть, как будет происходить слияние, - это просто попробовать слияние , часто потому, что они не знают, как легко вернуться к тому состоянию, в котором они были до если возникли проблемы.
Марк Лонгэйр
2
Я не знаю, было ли это добавлено в более поздней версии git, но в документации (1.8.4) говорится, что « git merge --abortэквивалентно тому, git reset --mergeкогда MERGE_HEADприсутствует», так что все, что легче запомнить :)
Самуэль Мичам,
@SamuelMeacham: спасибо за указание на это - это было введено в 1.7.4. Я обновил ответ с этим. Спасибо!
Марк Лонгэйр
Это предложение ничего не сделало для меня, на git 1.9.4.
Джангофан
137
Вы можете использовать, git merge --no-commitчтобы предотвратить фактическое слияние, и если вам не нравится, как слияние происходит, просто верните исходную головку.
Если вы определенно не хотите завершать слияние, даже если это быстрая перемотка вперед (и, следовательно, по определению не имеет конфликтов), вы также можете добавить --no-ff.
Вы также можете сделать git checkout --detachи проверить все, что вы хотите. Позже, если вы хотите сохранить свои изменения, сделайте git checkout -b new_branch. И если вы хотите выбросить свои изменения, отметьте любую нужную вам ветку ( git checkout master).
Шаян Токрей
Если topic_branchон огромен (как, вероятно, в случае, если вы, во-первых, diff masterзанимаетесь этим вопросом), результат, вероятно, слишком велик, чтобы вы могли его заметить, если слияние вызовет конфликты.
Fresh Crescent
Мне определенно нравится это много ... безопасно и просто.
Отказаться от слияния и выхода с ненулевым статусом, если текущий HEAD уже не обновлен или слияние не может быть разрешено как ускоренная перемотка вперед.
На самом деле это не симуляция, потому что произойдет ускоренное слияние в случае отсутствия конфликтов между двумя ветвями. Но в случае конфликтов вы будете проинформированы и ничего не произойдет.
Я был в состоянии использовать git merge --abort, недавно. Однако это может быть использовано только в случае конфликта слияния. Если вы уверены, что не захотите совершать коммит, используйте другие упомянутые выше методы.
Какие другие методы упомянуты выше? Они все упоминают git merge --abort. Вы должны в будущем подтвердить свой ответ, указав, кто написал ответ, на который вы ссылаетесь.
Майкл Фултон
3
Почему бы просто не создать одноразовую ветку (git checkout -b) и выполнить тестовое слияние там?
Я не знаю точно, относится ли это к вашему случаю , но ваш вопрос помните, что иногда я запускаю функцию, я фиксирую ее в течение нескольких дней и объединяю разработку с ней много раз.
На этом этапе я теряю контроль над точными файлами, которые я изменил, и я узнаю об этом только тогда, когда моя функция будет закрыта и мой код будет разрабатываться.
В этом случае, хороший способ узнать, какие изменения вы сделали (а не какие-либо из слияний), использует Sourcetree.
Вы должны щелкнуть правой кнопкой мыши на базовой ветви и выбрать Diff Against Current:
Затем sourcetree покажет вам все модификации, которые будут объединены, если вы объедините свою ветку с базовой веткой.
Конечно, это не покажет вам конфликты, но это полезный инструмент в слияниях.
Ответы:
Я не думаю, что есть способ имитировать то, что произойдет, пока вы не попробуете слияние. Однако, если вы убедитесь, что выходные данные
git status
пустые перед выполнением слияния, вполне безопасно просто пойти дальше и попробовать. Если у вас возникли конфликты, вы можете немедленно вернуться в состояние, в котором вы были раньше:Начиная с git 1.7.4, вы также можете прервать слияние, выполнив:
(Как объясняется в сообщении о фиксации, добавляющем эту опцию , это было добавлено для согласованности
git rebase --abort
и т. Д.)источник
--no-commit
намного проще, на мой взгляд--no-commit
вы все еще меняете индекс и рабочее дерево, что не совсем «без внесения изменений» :) Я хочу сказать, что когда люди спрашивают такого рода вопрос, как правило, потому что они не знают, что лучший способ увидеть, как будет происходить слияние, - это просто попробовать слияние , часто потому, что они не знают, как легко вернуться к тому состоянию, в котором они были до если возникли проблемы.git merge --abort
эквивалентно тому,git reset --merge
когдаMERGE_HEAD
присутствует», так что все, что легче запомнить :)Вы можете использовать,
git merge --no-commit
чтобы предотвратить фактическое слияние, и если вам не нравится, как слияние происходит, просто верните исходную головку.Если вы определенно не хотите завершать слияние, даже если это быстрая перемотка вперед (и, следовательно, по определению не имеет конфликтов), вы также можете добавить
--no-ff
.источник
git merge --abort
существует - возможно, вы имеете в видуgit reset --merge
?rebase
не существует--abort
дляgit merge
.--no-ff
тоже бросил . Чтобы предотвратить слияние FF.--no-ff
здесь в значительной степени обязателен, так как--no-commit
не останавливает быстрые изменения.Если я хочу сравнить изменения в ветке темы с master, я считаю, что проще и безопаснее сделать следующее:
После завершения слияния легко увидеть консолидированное изменение из основного
Когда закончите, просто удалите ветку trial_merge
Таким образом, основная ветвь никогда не меняется.
источник
git checkout --detach
и проверить все, что вы хотите. Позже, если вы хотите сохранить свои изменения, сделайтеgit checkout -b new_branch
. И если вы хотите выбросить свои изменения, отметьте любую нужную вам ветку (git checkout master
).topic_branch
он огромен (как, вероятно, в случае, если вы, во-первых,diff master
занимаетесь этим вопросом), результат, вероятно, слишком велик, чтобы вы могли его заметить, если слияние вызовет конфликты.Я использую :
согласно документации :
На самом деле это не симуляция, потому что произойдет ускоренное слияние в случае отсутствия конфликтов между двумя ветвями. Но в случае конфликтов вы будете проинформированы и ничего не произойдет.
источник
Я был в состоянии использовать
git merge --abort
, недавно. Однако это может быть использовано только в случае конфликта слияния. Если вы уверены, что не захотите совершать коммит, используйте другие упомянутые выше методы.источник
git merge --abort
. Вы должны в будущем подтвердить свой ответ, указав, кто написал ответ, на который вы ссылаетесь.Почему бы просто не создать одноразовую ветку (git checkout -b) и выполнить тестовое слияние там?
источник
Я не знаю точно, относится ли это к вашему случаю , но ваш вопрос помните, что иногда я запускаю функцию, я фиксирую ее в течение нескольких дней и объединяю разработку с ней много раз.
На этом этапе я теряю контроль над точными файлами, которые я изменил, и я узнаю об этом только тогда, когда моя функция будет закрыта и мой код будет разрабатываться.
В этом случае, хороший способ узнать, какие изменения вы сделали (а не какие-либо из слияний), использует Sourcetree.
Вы должны щелкнуть правой кнопкой мыши на базовой ветви и выбрать
Diff Against Current
:Затем sourcetree покажет вам все модификации, которые будут объединены, если вы объедините свою ветку с базовой веткой.
Конечно, это не покажет вам конфликты, но это полезный инструмент в слияниях.
источник