Это является общим источником путаницы, настолько, что #git
IRC канал консервированной текст справки для этого, называется !pull4
:
Мы рекомендуем против использования «мерзавец выборки/тянуть < дистанционный> < refspec> '(т. е. с аргументом ветвления), поскольку он не обновляет < remote>/< branch> ref. Легкий способ правильно найти вещи - это получить все: «git fetch» или «git pull» достаточно, если у вас один пульт; в противном случае мы рекомендуем 'git fetch < remote>' (плюс 'git merge < remote>/< branch>' если вы хотите вытащить/слить).
То, что здесь происходит, что git pull
без аргументов делает git fetch
на «по умолчанию удаленный» (обычно origin
), затем git merge
сек удаленная ветвь, соответствующая текущей локальной ветви. git pull <remote>
делает то же самое с явно указанным удаленным. Однако, «4-word pull», git pull <remote> <branch>
, получает эту ветвь во временное местоположение, FETCH_HEAD
, без, обновляя ветви отслеживания, а затем объединяет FETCH_HEAD
в вашу текущую ветку.
Таким образом, с помощью git pull origin blob
, вы говорите: «Я хочу, чтобы объединить последнюю версию blob
ветви на удаленном origin
в мою текущую ветвь, без обновления любого из моих отслеживаний ветвей или извлечений любых других данных».
Если ветвь слияния конфигурация является правильной (и они, вероятно, являются, так как git clone
и git checkout
пытаются установить их автоматически), вы можете просто git pull
или git pull origin
, и он будет получать все, а затем объединить ветвь, соответствующей вашое в настоящее время -открытая ветка. Если вам нужен более явный контроль, используйте git fetch
, а затем git merge
. git pull <remote> <branch>
редко что вы хотите.
(Причина, по которой git fetch
фиксирует вещи в вашем примере является то, что после того, как тянуть, ваш местный филиал был обновлен с последними удаленными фиксаций, но филиал отслеживания не был. git fetch
обновляет отслеживая ветвь с теми фиксаций , в этот момент разницы начинают иметь смысл снова.)
Предполагается, что удаленные изменения между вашим 'git pull' и явным' git fetch' не будут корректными? – BlackVegetable
Да, это правильно. – pinkboi
Интересно, будет ли 'git fetch -all' иметь значение, если вы используете его на третьем шаге. Я бы не подумал, что ваш второй выбор будет иметь значение вообще; вот что меня смущает. – BlackVegetable