Comportamento por omissão do 'git pull'

porque é que {[[0]} puxa tudo, incluindo os ramos remotos recentemente criados, mas git pull origin master não puxa?

estou a usar git version 2.9.3.windows.2.

Author: Melebius, 2016-11-22

3 answers

Quando indicar sem ramificações, são usadas as opções predefinidas. O valor por omissão significa obter e actualizar todas as ramificações existentes no repositório remoto.

Ver documentação para mais pormenores:

git pull [options] [<repository> [<refspec>…​]]

<refspec> indica quais os refs a obter e quais os refs locais a actualizar. Quando não aparecem <refspec>s na linha de comandos, os refs a obter são lidos a partir das variáveis remote.<repository>.fetch em vez disso (ver git-fetch[1]).

Fonte: https://git-scm.com/docs/git-pull

A documentação referenciada explica:

Você interage frequentemente com o mesmo repositório remoto, obtendo-o regularmente e repetidamente. Para poder acompanhar o progresso desse repositório remoto, o git fetch permite-lhe configurar as variáveis de configuração remote.<repository>.fetch.

Tipicamente uma variável como esta pode parecer:

[remote "origin"]
  fetch = +refs/heads/*:refs/remotes/origin/*

O exemplo acima irá buscar todos os ramos que existem no origin (isto é, qualquer ref que corresponda ao lado esquerdo do valor, refs/heads/*) e actualize os ramos de localização remota correspondentes na hierarquia refs/remotes/origin/*.

Fonte: https://git-scm.com/docs/git-fetch#CRTB

O comportamento é predefinido porque lhe permite sincronizar todos os repositórios de uma vez. Se não quiser actualizar todas as ramificações locais de uma vez, use git fetch para sincronizar os repositórios e git merge origin/<branch> para actualizar cada ramificação local.

 8
Author: Melebius, 2020-06-20 09:12:55

Em linguagem leiga, git pull obtém tudo do seu Remoto (todos os novos ramos e actualiza os antigos ramos) e, por omissão, fá-lo-á para origin. Se você tiver algum outro remoto como upstream você tem que especificar isso como git pull upstream e ele irá atualizar tudo a partir do upstream.

 4
Author: R. Gurung, 2020-01-30 14:14:55
É muito simples. Quando dizes que tudo, independentemente dos ganchos e filtros, é adicionado ao local. Em suma, obtém tudo do seu remoto e actualiza a pasta .git. Você pode ir para a pasta .git/logs/refs/remotes/origin/ você verá os ramos tudo o que você tem em seu local. Então, agora escrevi do meu cmd.

O que acontece por trás da cortina é independentemente dos ramos locais que você tem. Ele prende a origem e obter cada de lá para o seu local.

Mas, quando eu digito git pull origin master. Neste você dá uma especificação de caminho de origem você precisa de um último chefe do ramo mestre. Então só o mestre brach é puxado e refrescado como está à distância.

Assim, origin master é um Spec de caminho que eles chamaram em linguagem git para caminho.

 1
Author: PrafulD, 2016-11-22 12:03:15