W3docs

git pull

Nesta página, encontre informações sobre o comando git pull, suas opções mais comuns e dicas importantes sobre seu uso.

O que o git pull faz

git pull baixa novos commits de um repositório remoto e os integra imediatamente ao seu branch local atual. É o comando que você executa para atualizar o seu trabalho com o que seus colegas de equipe enviaram.

Por baixo dos panos, git pull é um atalho conveniente para dois comandos executados em sequência:

git fetch <remote>          # download the new commits
git merge <remote>/<branch> # integrate them into the current branch

Portanto, git pull equivale a git fetch seguido de git merge. Entender essa divisão é a chave para compreender o comando inteiro: o fetch atualiza seus branches de rastreamento remoto sem tocar no seu trabalho, e o merge (ou rebase, veja abaixo) reaplicar o novo histórico ao seu branch.

gitpull

Quando usar

git pull faz parte do fluxo de trabalho de "sincronização" do Git, ao lado de git push, git fetch e git remote. Use-o sempre que quiser que seu branch local reflita o estado remoto mais recente, por exemplo:

  • Antes de começar um novo trabalho, para construir sobre o código mais atual.
  • Antes de executar git push, para que seu push avance rapidamente em vez de ser rejeitado como "non-fast-forward".
  • Para capturar os commits de um colega de equipe em um branch compartilhado.

git fetch e git pull ambos baixam conteúdo remoto, mas diferem de uma forma importante: git fetch apenas atualiza seus branches de rastreamento remoto e deixa sua cópia de trabalho intocada, enquanto git pull também mescla essas mudanças no seu branch atual. Se você quiser inspecionar os commits recebidos antes de integrá-los, faça o fetch primeiro e execute o merge manualmente.

Como a mesclagem funciona durante um pull

Suponha que seu branch local e o remoto compartilhem o histórico até o commit E, depois divirjam. O remoto ganhou commits A, B e C que você não tem. Executar git pull busca esses commits.

gitpull1

O Git então cria um novo commit de mesclagem, H, que une o seu trabalho local com os commits buscados A, B e C, combinando as duas linhas de histórico.

gitpull2

Se o seu branch local não divergiu (você não tem novos commits locais), o Git simplesmente move o ponteiro do seu branch para frente até os novos commits. Isso é chamado de fast-forward e não produz nenhum commit de mesclagem.

Com a opção --rebase, o Git reaplicar seus commits locais sobre os commits buscados em vez de criar um commit de mesclagem, mantendo o histórico linear.

gitpull3

Opções comuns

ComandoDescrição
git pull <remote>Busca o conteúdo remoto e o mescla diretamente na cópia local (equivalente a git fetch <remote> seguido de git merge <remote>/<current-branch>).
git pull --no-commit <remote>Busca e mescla, mas para antes de criar o commit de mesclagem para que você possa inspecionar o resultado primeiro.
git pull --rebase <remote>Reaplicar seus commits locais sobre os commits buscados em vez de mesclá-los, mantendo o histórico linear.
git pull --ff-onlyAtualiza apenas se a mesclagem puder ser um fast-forward; caso contrário, aborta sem tocar no seu branch.
git pull --verboseFornece saída detalhada, mostrando o conteúdo baixado e os detalhes da mesclagem durante o pull.

Exemplos

Pull do branch upstream

Invocar git pull sem argumentos busca e mescla as mudanças do branch upstream configurado para o branch atual:

git pull

Para que isso funcione, o branch atual deve ter um upstream definido (o Git o armazena após o primeiro git push -u ou git branch --set-upstream-to).

Pull de um remote e branch específicos

Você pode nomear o remote e o branch explicitamente:

git pull <remote> <branch>

Isso busca e mescla as mudanças do branch especificado do remote indicado. Por exemplo, para fazer pull do branch develop do remote origin:

git pull origin develop

Pull com rebase

git pull --rebase

Em vez de mesclar, este comando reaplicar seus commits locais sobre os commits buscados. O resultado é um histórico linear sem commit de mesclagem, o que muitas equipes preferem para branches de funcionalidade. Para tornar isso o padrão para um branch, configure git config pull.rebase true. Consulte git rebase para conhecer as vantagens e desvantagens.

Pull sem commitar a mesclagem

git pull --no-commit

Isso busca e mescla, mas para logo antes de criar o commit de mesclagem, deixando o resultado no stage para que você possa revisar (e alterar) antes de fazer o commit com git commit.

Resolvendo conflitos após um pull

Se os commits remotos alteraram as mesmas linhas que você alterou localmente, a mesclagem não pode ser concluída automaticamente e o Git reporta um conflito:

Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.

Para resolver, abra cada arquivo com conflito, edite-o para manter o conteúdo correto (removendo os marcadores <<<<<<<, ======= e >>>>>>>), depois adicione ao stage e faça o commit:

git add app.js
git commit

Se preferir não lidar com o conflito agora, git merge --abort retorna seu branch ao estado anterior ao pull.

Nota

Fazer pull em um branch com mudanças locais não commitadas pode falhar porque o Git se recusa a sobrescrever seu trabalho. Faça o commit ou use git stash nas suas mudanças antes de fazer o pull e, em seguida, desfaça o stash depois.

Prática

Prática
Quais das afirmações a seguir sobre o comando 'git pull' são verdadeiras?
Quais das afirmações a seguir sobre o comando 'git pull' são verdadeiras?
Was this page helpful?