Restablecer la rama del repositorio local para que sea como el HEAD del repositorio remoto
¿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 status
afirma 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
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).
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
Primero, use git reset para restablecer el valor previamente obtenido HEAD
de 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
git reset --hard HEAD
en 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.