Pregunta

¿Hay alguna forma de revertir o deshacer git pull para que mi fuente / repos recupere el estado anterior que tenía antes de hacer git pull? Quiero hacer esto porque fusionó algunos archivos que no quería, pero solo fusionó otros archivos restantes. Entonces, quiero recuperar esos archivos, ¿es eso posible? Gracias :)

EDITAR Quiero deshacer git merge para aclararlo. Después de ver algunas respuestas, hice esto

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

Ahora, ¿qué debo hacer? ¿Hacer git reset --hard está bien? No quiero volver a atornillarlo, ¿así que pide pasos detallados?

¿Fue útil?

Solución

git pull hará dos cosas: realiza una git fetch y luego una git merge donde fusiona las ramas que se han configurado para fusionarse en su configuración.

Entonces, lo que quiere hacer es deshacer la fusión (deshacer la búsqueda no tiene mucho sentido y no debería ser necesario).

Para hacerlo, puede intentar usar git reset --hard para restablecer un estado anterior. Utilice el comando git-reflog para encontrar el SHA-1 del estado anterior y luego restablecerlo.

Advertencia : git reset --hard elimina todos los cambios no confirmados.

Otros consejos

Igual que la respuesta de jkp, pero aquí está el comando completo:

git reset --hard a0d3fe6

donde se encuentra a0d3fe6 haciendo

git reflog

y mirando el punto en el que desea deshacer.

Una forma más moderna de deshacer una fusión es:

git merge --abort

Y la forma un poco más antigua:

git reset --merge

La forma de la vieja escuela descrita en respuestas anteriores (advertencia: descartará todos los cambios locales):

git reset --hard

Pero en realidad, vale la pena notar que git merge --abort solo es equivalente a git reset --merge dado que MERGE_HEAD es presente. Esto se puede leer en el comando git help for merge.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

Después de una fusión fallida, cuando no hay MERGE_HEAD , la fusión fallida se puede deshacer con git reset --merge pero no necesariamente con git merge - -abort , para que no solo sean una sintaxis antigua y nueva para la misma cosa . Es por eso que encuentro que git reset --merge es mucho más útil en el trabajo diario.

funciona primer uso: git reflog

encuentre su SHA de su estado anterior y cree (HEAD @ {1} es un ejemplo)

git reset --hard HEAD@{1}

Si tiene gitk (intente ejecutar " gitk --todos desde la línea de comandos de git "), es simple. Simplemente ejecútelo, seleccione la confirmación a la que desea revertir (haga clic con el botón derecho) y seleccione "Restablecer rama maestra aquí". Si no tiene cambios no confirmados, elija el "duro" opción.

Suponga que $ COMMIT fue la última identificación de confirmación antes de realizar git pull . Lo que necesita para deshacer el último tirón es

git reset --hard $ COMMIT

.

Bonus:

Al hablar de pull, me gustaría compartir un truco interesante,

git pull --rebase

Este comando anterior es el comando más útil en mi vida git que ahorró mucho tiempo.

Antes de enviar su nueva confirmación al servidor, pruebe este comando y sincronizará automáticamente los últimos cambios del servidor (con una búsqueda + fusión) y colocará su confirmación en la parte superior del registro de git. No necesita preocuparse por la extracción / fusión manual.

Encuentre detalles en: http://gitolite.com/git-pull--rebase

puedes hacer git reset --hard ORIG_HEAD

desde " pull " o "fusionar" establezca ORIG_HEAD para que sea el estado actual antes de realizar esas acciones.

Esta es la forma más fácil de revertir los cambios de extracción.

git reset --hard 9573e3e0

Donde 9573e3e0 es su {Commit id}

Si hay una fusión fallida, que es la razón más común para querer deshacer un git pull , ejecutar git reset --merge hace exactamente lo que uno esperaría : mantenga los archivos recuperados, pero deshaga la fusión que git pull intentó fusionar. Entonces uno puede decidir qué hacer sin el desorden que a veces genera git merge . Y no necesita uno para encontrar la ID de confirmación exacta que requiere --hard en todas las demás respuestas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top