Artigo original: How to Overwrite Local Files with Git Pull

Tradução realizada em português europeu

Se sentires a necessidade de descartar todas as alterações locais e simplesmente começar de novo/substituir tudo por uma cópia de uma ramificação (do inglês, branch) remota, deves seguir este guia.

Importante: caso tenhas alguma alteração local, ela será perdida. Com ou sem a opção --hard, quaisquer commits locais que ainda não foram enviados serão perdidos.

Se tiveres algum ficheiro que não seja rastreado pelo Git (por exemplo, conteúdo carregado pelo utilizador), ele não será afetado.

O fluxo de substituição:

Para substituir os teus ficheiros locais, faz:

git fetch --all
git reset --hard <remoto>/<nome_da_ramificacao>

Por exemplo:

git fetch --all
git reset --hard origin/master

Como funciona:

git fetch descarrega a versão remota mais recente sem tentar fazer merge ou rebase de nada.

De seguida, o git reset redefine a ramificação principal para o que acabaste de procurar. A opção --hard altera todos os ficheiros no fluxo de trabalho para corresponderem aos ficheiros em origin/master.

Informação adicional:

Vale a pena notar que é possível manter os commits locais atuais ao criar uma ramificação do master ou qualquer outra ramificação na qual queiras trabalhar antes de redefinir:

Por exemplo:

git checkout master
git branch nova-ramificacao-para-guardar-os-commits-atuais
git fetch --all
git reset --hard origin/master

Depois disso, todos os commits antigos serão mantidos em nova-ramificacao-para-guardar-os-commits-atuais. No entanto, alterações em que não se fez o commit (nem se colocou em stage), serão perdidas. Certifica-te que fazes stash e commit a tudo o que precisares.

Atribuições:

Este artigo é baseado numa pergunta feita no Stack Overflow