Digamos que el control remoto es originy la rama es master, y digamos que ya se ha mastercerrado, podría intentar lo siguiente:
git fetch origin
git reset --hard origin/master
Básicamente, esto solo toma la rama actual y la apunta a la HEADrama remota.
ADVERTENCIA : Como se indica en los comentarios, esto eliminará sus cambios locales y sobrescribirá con lo que sea que esté en el origen .
O puede usar los comandos de plomería para hacer esencialmente lo mismo:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDITAR: Me gustaría explicar brevemente por qué funciona esto.
los .git carpeta puede contener las confirmaciones de cualquier número de repositorios. Dado que el hash de confirmación es en realidad un método de verificación del contenido de la confirmación, y no solo un valor generado aleatoriamente, se utiliza para hacer coincidir los conjuntos de confirmación entre repositorios.
Una rama es solo un puntero con nombre a un hash dado. Aquí hay un conjunto de ejemplos:
$ 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 uno de estos archivos contiene un hash que apunta a una confirmación:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Estos son todos para el mecanismo de almacenamiento interno de git y funcionan independientemente del directorio de trabajo . Haciendo lo siguiente:
git reset --hard origin/master
git apuntará a la rama actual al mismo valor hash al que apunta el origen / maestro. Luego cambia con fuerza el directorio de trabajo para que coincida con la estructura / contenido del archivo en ese hash.
Para ver esto en funcionamiento, siga adelante y pruebe lo siguiente:
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