Restablecer la rama del repositorio local para que sea como el HEAD del repositorio remoto

Resuelto hap497 asked hace 14 años • 27 respuestas

¿Cómo restablezco mi sucursal local para que sea igual a la sucursal en el repositorio remoto?

Lo intenté:

git reset --hard HEAD

Pero git statusafirma que he modificado archivos:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java
hap497 avatar Oct 27 '09 07:10 hap497
Aceptado

Configurar su sucursal para que coincida exactamente con la sucursal remota se puede realizar en dos pasos:

git fetch origin
git reset --hard origin/master

Si desea guardar el estado de su sucursal actual antes de hacer esto (por si acaso), puede hacer:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Ahora su trabajo se guarda en la rama "mi-trabajo-guardado" en caso de que decida que lo quiere recuperar (o quiere verlo más tarde o compararlo con su rama actualizada).

Tenga en cuenta que el primer ejemplo supone que el nombre del repositorio remoto es "origen" y que la rama denominada "master" en el repositorio remoto coincide con la rama actualmente desprotegida en su repositorio local.

Por cierto, esta situación en la que te encuentras se parece muchísimo a un caso común en el que se ha realizado una inserción en la rama actualmente desprotegida de un repositorio no básico. ¿Ingresó recientemente a su repositorio local? Si no, entonces no te preocupes: algo más debe haber causado que estos archivos terminen modificados inesperadamente. De lo contrario, debe tener en cuenta que no se recomienda ingresar a un repositorio que no sea básico (y no a la rama actualmente desprotegida, en particular).

Dan Moulding avatar Oct 27 '2009 01:10 Dan Moulding

Necesitaba hacer (la solución en la respuesta aceptada):

git fetch origin
git reset --hard origin/master

Seguido por:

git clean -f

para eliminar archivos locales

Para ver qué archivos se eliminarán (sin eliminarlos realmente):

git clean -n -f
Akavall avatar Dec 27 '2014 06:12 Akavall

Primero, use git reset para restablecer el valor previamente obtenido HEADde la rama ascendente correspondiente:

git reset --hard @{u}

La ventaja de especificar @{u}su forma detallada @{upstream}es que no es necesario especificar explícitamente el nombre del repositorio remoto ni de la rama. En Windows o con PowerShell, especifique "@{u}"(entre comillas dobles).

A continuación, según sea necesario, utilice git clean para eliminar archivos sin seguimiento, opcionalmente también con -x:

git clean -df

Finalmente, según sea necesario, obtenga los últimos cambios:

git pull
Asclepius avatar Feb 10 '2015 20:02 Asclepius

git reset --hard HEADen realidad solo se restablece al último estado comprometido. En este caso HEAD se refiere al HEAD de su sucursal.

Si tiene varias confirmaciones, esto no funcionará.

Lo que probablemente quiera hacer es restablecer el encabezado de origen o como se llame su repositorio remoto. Probablemente simplemente haría algo como

git reset --hard origin/HEAD

Pero ten cuidado. Los restablecimientos completos no se pueden deshacer fácilmente. Es mejor hacer lo que sugiere Dan y realizar una copia de los cambios antes de restablecer.

Mikael Ohlson avatar Oct 27 '2009 01:10 Mikael Ohlson