sirve - git undo pull merge
Deshacer git pull, cómo llevar repos al antiguo estado (8)
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.
¿Hay alguna forma de revertir o deshacer git pull para que mis fuentes / repos lleguen al estado antiguo que era antes de hacer git pull? Quiero hacer esto porque combinó algunos archivos que no quería, pero solo fusiona otros archivos restantes. Entonces, quiero recuperar esos archivos, ¿es posible? Gracias :)
EDITAR Quiero deshacer git merge para aclarar. Después de ver algunas respuestas, hice esto.
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Y ahora que debo hacer ? Haciendo git reset --hard
esta bien? No quiero volver a atornillarlo, ¿así que pedir pasos detallados?
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: conservar los archivos buscados, pero deshacer la fusión que git pull
intentó fusionar. Entonces, uno puede decidir qué hacer sin el desorden que git merge
veces genera. Y no necesita uno para encontrar el ID de compromiso exacto que, --hard
menciona más --hard
en todas las demás respuestas, es necesario.
Si tiene gitk (intente ejecutar "gitk --todo desde su línea de comandos de git"), es simple. Simplemente ejecútelo, seleccione la confirmación a la que desea revertir (clic con el botón derecho) y seleccione "Restablecer la rama maestra aquí". Si no tiene cambios no confirmados, elija la opción "difícil".
Supongamos que $COMMIT
fue el último ID de confirmación antes de realizar git pull
. Lo que necesitas para deshacer el último tirón es
git reset --hard $COMMIT
.
Prima:
Al hablar de tirar, me gustaría compartir un truco interesante,
git pull --rebase
Este comando anterior es el comando más útil en mi vida de git que ahorró mucho tiempo.
Antes de enviar su nuevo compromiso al servidor, pruebe este comando, se sincronizarán automáticamente los últimos cambios del servidor (con fetch + merge) y colocará su compromiso en la parte superior del registro de git. No hay necesidad de preocuparse por la extracción / fusión manual.
Encuentre detalles en: http://gitolite.com/git-pull--rebase
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 las respuestas anteriores (advertencia: descartará todos sus 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
está presente. Esto se puede leer en la ayuda de git para el comando de combinación.
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
, por lo que no solo son sintaxis antigua y nueva para la misma cosa . Es por esto 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 haga (HEAD @ {1} es un ejemplo)
git reset --hard HEAD@{1}
puedes hacer git reset --hard ORIG_HEAD
ya que "pull" o "merge" establecen ORIG_HEAD para que sea el estado actual antes de realizar esas acciones.
git pull
hará dos cosas: realiza una git fetch
y luego una git merge
donde combina las ramas que se han configurado para que se fusionen en la 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 a un estado anterior. Use el comando git-reflog para encontrar el SHA-1 del estado anterior y luego reinícielo.
Advertencia : git reset --hard
elimina todos los cambios no confirmados.