¿Cuál es el significado de git reset --hard origin / master?

224

Hice un git pully recibí un error:

Los siguientes archivos de árbol de trabajo se sobrescribirán con merge ... Mueva o elimínelos antes de poder fusionar.

Para resolver esto hice lo siguiente:

git fetch
git reset --hard origin/master

Ahora cuando lo hago git pull, dice todo actualizado. Quiero saber qué sucede exactamente cuando ejecuto estos comandos. Sé que git fetchrecupera los cambios del repositorio remoto sin fusionarlos en mi repositorio local.

¿Cuál es el significado de git reset --hard origin/master? ¿Como funciona?

Raza
fuente

Respuestas:

414
git reset --hard origin/master

dice: deseche todos mis cambios por etapas y por etapas, olvide todo en mi sucursal local actual y hágalo exactamente igual que origin/master.

Probablemente quisiste preguntar esto antes de ejecutar el comando. La naturaleza destructiva se insinúa utilizando las mismas palabras que en "restablecimiento completo".

CB Bailey
fuente
99
Puedes deshacer este movimiento usando git reset --hard HEAD@{1}. HEAD@{1}varía de una situación a otra, por lo que se recomienda buscarlo git reflog.
Nils Werner
2
Tenga en cuenta que el método de @ NilsWerner para deshacer el movimiento no restaura los cambios por etapas y por etapas. Esos se han ido para siempre.
Michael Anderson
3
Todavía se pueden encontrar archivos en etapas git fsck --lost-found, pero no se adjuntarán a su ruta de archivo original y puede ser difícil clasificarlos.
CB Bailey
1
A menudo es útil restablecer su rama maestra local a origen / maestro cuando ha (tal vez accidentalmente) cometido cambios en su maestro local en lugar de una rama local. Simplemente cree una sucursal local para sus últimas confirmaciones y luego restablezca su maestro local a origen / maestro. A continuación, puede fusionar o volver a crear su rama del maestro según sea necesario.
Mike Hopper
2
jajaja "insinuado" es una excelente manera de describir esto, ya que no es ni obvio ni explícito
Ben Sandeen