Разница между git merge another-branch и git pull remote другой ветки - PullRequest
0 голосов
/ 26 апреля 2018

Считайте, что я на master, и у меня есть удаленная ветвь develop на моем пульте с именем origin, все обновлено, я уже запустил git fetch.

Есть ли разница между git merge origin/develop и git pull origin develop?

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Учитывая указанные вами ограничения и предполагая, что никто не изменил ничего на пульте с вашего git fetch, единственное отличие состоит в том, что стандартное сообщение о фиксации будет другим , Один скажет merge branch 'origin/develop', а другой скажет merge branch 'develop' of '<em>url</em>'. Если вы предоставите или напишите свое собственное сообщение о слиянии, различий не будет вообще обнаружено.

(Хеш-идентификатор полученного коммита слияния будет зависеть от времени , поэтому, если вы попробуете это самостоятельно, вы, вероятно, получите два разных коммита, если вы не сможете сделать оба в течение одной секунды. Однако, хэш-идентификатор будущего коммита практически невозможно предсказать: вам нужно знать, что будет в нем, включая метки времени.)

0 голосов
/ 26 апреля 2018

Я бы отметил, что origin/develop не является веткой; так что вопрос больше напоминает «разницу между git merge remote-tracking-ref и git pull remote branch» ...

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

Помимо этого, вопрос сводится к тому, какие предположения делаются.

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

Это звучит , как будто вы хотите предположить, что ваш локальный контрольный и удаленный филиал указывают на один и тот же коммит. Как правило, это неверное предположение, потому что даже если вы «только что выполнили fetch», это не исключает того, что кто-то еще делает push перед выполнением следующей команды.

Тем не менее, это не имеет значения на самом деле . Все это означает, что, если вы сделаете слияние, вы можете оказаться позади (если кто-то случайно нажал сразу после вашей выборки); и не то, чтобы делать pull лучше, потому что кто-то может сделать push сразу после вашего pull ... поэтому, если мир хочет вас поймать, ничто из того, что вы делаете, не гарантирует, что ничего не происходит за то, что у вас есть локально.

На самом деле, я бы сказал, что если вы только что сделали выборку, вам лучше выполнять слияние, а не извлечение, потому что извлечение сделает еще один fetch, который не имеет большого практического значения.

0 голосов
/ 26 апреля 2018

Pull - это выборка + слияние, и вы явно объединяетесь с удаленной * отслеживаемой ветви, так что разницы нет даже без извлечения.

если вы дадите мне -1, хотя бы прокомментируйте, в чем ваша проблема с моим ответом

...