Git deshacer rama local eliminar


377

Acabo de eliminar la rama incorrecta con algunos cambios experimentales que necesito git branch -D branchName.

¿Cómo recupero la rama?


77
Me alegra saber que no soy el único cojo que hizo esto (y olvidé presionar regularmente para hacer una copia a distancia)
Ray

Respuestas:


719

Puede usar git reflog para encontrar el SHA1 de la última confirmación de la rama. Desde ese punto, puede recrear una rama utilizando

git branch branchName <sha1>

Editar: como dice @seagullJS, el branch -Dcomando le dice el sha1, por lo que si aún no ha cerrado el terminal, se vuelve realmente fácil. Por ejemplo, esto elimina y luego restaura inmediatamente una rama llamada master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

71
Git le dice cuál era el SHA1 cuando se elimina la rama, por lo que si solo lo elimina, podría haber solo unas pocas líneas en la línea de comando.
seagullJS

si esta rama existe en el servidor, alternativamente, puede usargit branch branchName origin/branchName
Florian Castellane el

Además, terminé usando git cherry-pick <sha1> para mover el commit a la rama
Akin Okegbile

54

Si conoce el último SHA1 de la rama, puede intentar

git branch branchName <SHA1>

Puede encontrar el SHA1 usando git reflog, descrito en la solución aquí .


34

Si aún no ha empujado la eliminación, simplemente puede hacer:

$ git checkout deletedBranchName

Esta respuesta hace que Git Extensions se calle sobre "la rama que intenta empujar parece ser una nueva rama para este control remoto". Muchas gracias.
Omer

29

Si acaba de eliminar la rama, verá algo como esto en su terminal:

Deleted branch branch_name(was e562d13)
  • donde e562d13 es un ID único (también conocido como "SHA" o "hash"), con esto puede restaurar la rama eliminada.

Para restaurar la rama, use:

git checkout -b <branch_name> <sha>

por ejemplo :

git checkout -b branch_name e562d13 

4

Primero: haga una copia de seguridad de todo su directorio, incluido el directorio .git.

Segundo: puede usar git fsck --lost-foundpara obtener la identificación de los commits perdidos.

Tercero: rebase o fusione el commit perdido.

Cuarto: siempre piense dos veces antes de usar -D o --force con git :)

También podría leer esta buena discusión sobre cómo recuperarse de este tipo de error.

EDITAR: Por cierto, no ejecute git gc(ni permita que se ejecute solo, es decir, no ejecute git fetchni nada similar) o puede perder sus confirmaciones para siempre.


1
1 y 4 son excesivamente IMO.
jwg

sí, es por eso que usamos git, para evitar tener que cargar con todo eso. Cada acción que ha cometido aún está disponible para usted.
Mateor

4

Gracias, esto funcionó.

git branch new_branch_name sha1

git checkout new_branch_name

// puedo ver mis archivos registrados en mi antigua sucursal


3

Sigue estos pasos:

1: Ingrese:

git reflog show 

Esto mostrará todo el historial de confirmaciones, debe seleccionar el sha-1 que tiene la última confirmación que desea recuperar

2: cree un nombre de sucursal con la ID de Sha-1 que seleccionó, por ejemplo: 8c87714

git branch your-branch-name 8c87714

0

Esto funcionó para mí:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.