Talvez você, assim como eu, aprendeu a usar git pull direto e nem se preocupou com a função do fetch até descobrir este comando.
Para que serve então git fetch? O comando git fetch pode ser usado para baixar todos os commits do repositório remoto sem afetar o seu código local.
Basicamente, git pull faz primeiro um git fetch seguido de um git merge origin/master.
A função do git fech é bastante simples na prática, mas se você procura algo mais detalhado, este é o artigo certo!
git fetch
Primeiramente, precisamos entender que no Git existem duas versões do repositório local. Uma versão contém o seu código, com suas alterações, e a outra versão espelha o repositório remoto, para que seja usada como contraste à sua versão local do código no caso de fazer merge ou diff, por exemplo.
Para entender isto, você pode fazer o seguinte teste:
- Tenha um repositório próprio em dois diretórios diferentes.
- Faça uma alteração e um commit em um dos diretórios e em seguida dê
git push
. - No outro repositório faça um fetch seguido de um diff:
git fetch git diff origin/master
Você vai ver as diferenças entre o seu código local e o código remoto (que na verdade agora está em sua máquina graças ao fetch), com a alteração que acabou de ser feita, sem que o código local seja alterado.
Esta é uma forma segura de atualizar o espelho do repositório remoto em seu repositório local sem fazer merge.
Para ter a versão remota em sua "área de trabalho", você ainda precisará fazer "merge" deste commit. E isso é feito automaticamente no caso do git pull:
git pull
O comando git pull existe por ser uma forma mais semântica e simples de "puxar" o código, mas na realidade ele simplesmente acaba executando fetch e em seguida merge. Ex:
git fetch
git merge origin/master
No código acima temos a referência de "origin/master" que nada mais é do que a uma referência à cópia da branch "master" obtida através de git fetch em "origin", que é um atalho ao repositório remoto.