Digamos que o remoto é origine o branch está master, e digamos que você já tenha feito mastercheck-out, pode tentar o seguinte:
git fetch origin
git reset --hard origin/master
Isso basicamente pega o branch atual e o aponta para o HEADbranch remoto.
AVISO : conforme declarado nos comentários, isso descartará as alterações locais e substituirá o que estiver na origem .
Ou você pode usar os comandos de encanamento para fazer essencialmente o mesmo:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDIT: Eu gostaria de explicar brevemente por que isso funciona.
A .gitpasta pode conter os commits para qualquer número de repositórios. Como o hash de confirmação é na verdade um método de verificação para o conteúdo da confirmação, e não apenas um valor gerado aleatoriamente, ele é usado para combinar conjuntos de confirmação entre repositórios.
Um branch é apenas um ponteiro nomeado para um determinado hash. Aqui está um exemplo de conjunto:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Cada um desses arquivos contém um hash apontando para um commit:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Todos eles são para o mecanismo de armazenamento git interno e funcionam independentemente do diretório de trabalho . Fazendo o seguinte:
git reset --hard origin/master
git irá apontar o branch atual com o mesmo valor hash para o qual origin / master aponta. Em seguida, ele altera à força o diretório de trabalho para corresponder à estrutura / conteúdo do arquivo naquele hash.
Para ver isso no trabalho, vá em frente e tente o seguinte:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD