Git pull: atualizar o repositório local com a versão remota!

Quando trabalhamos em um projeto com uma equipe, é muito importante trabalhar em cima da versão mais atualizada do código. Ter o repositório do Git e todas as branches na versão mais recente, além de tornar o trabalho mais produtivo, auxilia a não ter perdas de código ou ter que fazer merge ou rebase muito complexos. Esse é o grande objetivo do git pull

Com ele, conseguimos trabalhar sempre com a versão mais atualizada dos códigos, principalmente quando temos modificações de outras pessoas do time. Se você trabalha com branches remotas, esse é um dos comandos do git que você vai mais utilizar!

Confira o que você aprenderá em nosso texto:

O que é o Git pull e como funciona?

O git pull é um comando usado para atualizar suas branches locais de acordo com as branches remotas. Ele é uma combinação de dois comandos: git fetch seguido por git merge.

Na prática, quando você executa o comando git pull, ele executa o git fetch para conseguir baixar o conteúdo que está no ambiente remoto. Após ser baixado, é executado o git merge e um novo commit é gerado com as alterações que tinham no ambiente remoto. 

Exemplo de funcionamento Git Pull

No exemplo acima, os commits B, C e D não existiam no ambiente local. Então, quando é executado o git pull, é criado um novo commit H, com as alterações desses 3 commits. Dessa forma, o ambiente local fica atualizado com todas as mudanças feitas no ambiente remoto. Existe outra forma de executá-lo que não seja criando um novo commit. É possível usar a estratégia de rebase em vez de de merge

Quais as diferenças entre git pull e git fetch

O primeiro ponto que podemos notar é que o git fetch faz parte do git pull. Este é a combinação do git fetch com git merge. O git fetch atualiza todas as branches que estão rastreadas remotamente. Mas ele só baixa as atualizações. Caso aconteça algum conflito, você poderá se preocupar em resolvê-lo depois com merge ou rebase. 

Um exemplo no qual você pode fazer o uso do git fetch e git merge separados em vez do git pull é quando você tiver problemas de conexão com a internet. Nesse cenário, você pode primeiro fazer o fetch e baixar os dados e, posteriormente, mesmo sem internet você pode fazer o merge onde houver conflitos. 

Opções para usar com Git pull

–no-commit

Nesse caso, um commit não será gerado. Ou seja, o merge será feito, mas sem um commit. Por isso, é importante verificar qual o estado da sua branch antes de continuar. 

–no-ff

Nessa opção, é criado um commit de merge em todos os casos, independentemente se tiver um conflito ou não. 

–ff-only

Com essa opção, o merge será completado apenas se for possível ser feito sem conflitos.

–rebase

Com essa opção, em vez de usar a estratégia de mesclagem com merge é utilizado o rebase

–all

Utilizando esse comando, você não precisa especificar um ambiente remoto, porque ele faz um fetch em todos os ambientes remotos. 

–force

Essa opção faz com que o git fetch seja forçado mesmo que o Git não permita.

4 Exemplos de usos comuns do Git pull na prática

Git pull em repositórios remotos

Se você estiver no seu ambiente de trabalho e quiser atualizar a branch que está trabalhando, basta rodar:

git pull

Nesse cenário, todas as branches localizadas remotamente, serão atualizadas e a branch que você está trabalhando receberá a ação de merge. Se você tiver mais de um ambiente remoto configurado no seu repositório, você precisará especificar esse ambiente remoto, usando o caso abaixo:

git pull <remoto>

O caso geralmente mais utilizado é origin ou upstream

Git pull –rebase

Depois do git fetch, o padrão do Git é executar o git merge. Caso você queira que a opção de mesclagem seja com uma estratégia de rebase, você pode usar essa opção. 

git pull --rebase

Nesse caso, o histórico de commits será reescrito para que todos os seus commits locais (os novos) fiquem após os que foram baixados da branch remota. Além disso, uma outra diferença, é que não fica com um commit novo de merge, já que o histórico foi todo alterado. 

Git pull –force

A opção –force não é usada para todos os comandos executados para nosso comando pull. Ela é usada apenas no fetch. É como se fizesse um git fetch --force. E para que você precisaria forçar o git fetch? Em alguns casos, quando usamos um refspec, o comando fetch pode ser bloqueado. 

Por exemplo, se você tiver algo como:

git fetch origin/feature-1:minha-feature

Então, estamos fazendo uma espécie de mapeamento da branch remota “feature-1” para uma branch local “minha-feature”. Nesse caso, se essa operação mudar o histórico, o Git não permitirá essa operação, a menos que seja usado o –force

É importante lembrar que, em qualquer comando, usar a opção de –force deve sempre ser usada com cuidado, pois você está sobrescrevendo algo ou alterando algo natural do Git. 

O git pull é um dos comandos mais importantes e que você mais utilizará no seu dia a dia dentro dos seus projetos. Com ele, trabalhar com equipes remotas e aumentar a agilidade no desenvolvimento do seu projeto fica ainda mais fácil e prático. 

É muito importante você sempre manter o seu ambiente de trabalho atualizado. Além de evitar um retrabalho, você também evita ter que fazer um merge ou um rebase mais complexo no futuro. Então nunca deixe só para o último momento atualizar as suas branches. Atualize sempre que possível! 

Para aumentar ainda mais sua produtividade, continue estudando mais comandos Git com Git add!