Есть ли способ симуляции git merge
между двумя ветвями, текущей рабочей ветвью и мастером, но без внесения каких-либо изменений?
У меня часто возникают конфликты, когда я должен сделать git merge
. Есть ли способ имитации слияния в первую очередь?
Есть ли способ симуляции git merge
между двумя ветвями, текущей рабочей ветвью и мастером, но без внесения каких-либо изменений?
У меня часто возникают конфликты, когда я должен сделать git merge
. Есть ли способ имитации слияния в первую очередь?
Ответы:
Я не думаю, что есть способ имитировать то, что произойдет, пока вы не попробуете слияние. Однако, если вы убедитесь, что выходные данные git status
пустые перед выполнением слияния, вполне безопасно просто пойти дальше и попробовать. Если у вас возникли конфликты, вы можете немедленно вернуться в состояние, в котором вы были раньше:
git reset --merge
Начиная с git 1.7.4, вы также можете прервать слияние, выполнив:
git merge --abort
(Как объясняется в сообщении о фиксации, добавляющем эту опцию , это было добавлено для согласованности 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, я считаю, что проще и безопаснее сделать следующее:
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
Таким образом, основная ветвь никогда не меняется.
git checkout --detach
и проверить все, что вы хотите. Позже, если вы хотите сохранить свои изменения, сделайте git checkout -b new_branch
. И если вы хотите выбросить свои изменения, отметьте любую нужную вам ветку ( git checkout master
).
topic_branch
он огромен (как, вероятно, в случае, если вы, во-первых, diff master
занимаетесь этим вопросом), результат, вероятно, слишком велик, чтобы вы могли его заметить, если слияние вызовет конфликты.
Я использую :
git merge --ff-only
согласно документации :
Отказаться от слияния и выхода с ненулевым статусом, если текущий HEAD уже не обновлен или слияние не может быть разрешено как ускоренная перемотка вперед.
На самом деле это не симуляция, потому что произойдет ускоренное слияние в случае отсутствия конфликтов между двумя ветвями. Но в случае конфликтов вы будете проинформированы и ничего не произойдет.
Я был в состоянии использовать git merge --abort
, недавно. Однако это может быть использовано только в случае конфликта слияния. Если вы уверены, что не захотите совершать коммит, используйте другие упомянутые выше методы.
git merge --abort
. Вы должны в будущем подтвердить свой ответ, указав, кто написал ответ, на который вы ссылаетесь.
Почему бы просто не создать одноразовую ветку (git checkout -b) и выполнить тестовое слияние там?
Я не знаю точно, относится ли это к вашему случаю , но ваш вопрос помните, что иногда я запускаю функцию, я фиксирую ее в течение нескольких дней и объединяю разработку с ней много раз.
На этом этапе я теряю контроль над точными файлами, которые я изменил, и я узнаю об этом только тогда, когда моя функция будет закрыта и мой код будет разрабатываться.
В этом случае, хороший способ узнать, какие изменения вы сделали (а не какие-либо из слияний), использует Sourcetree.
Вы должны щелкнуть правой кнопкой мыши на базовой ветви и выбрать Diff Against Current
:
Затем sourcetree покажет вам все модификации, которые будут объединены, если вы объедините свою ветку с базовой веткой.
Конечно, это не покажет вам конфликты, но это полезный инструмент в слияниях.