2010-10-26 22 views
247

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

¿Cómo recupero la rama?

+2

contento de saber que no soy la única lame- o ¿quién hizo esto (y se olvidó de presionar regularmente para copiar de forma remota) – Ray

+0

que hace que 3 de nosotros ahora –

Respuesta

504

Puede usar git reflog para encontrar el SHA1 de la última confirmación de la bifurcación. A partir de ese momento, puede volver a crear una rama utilizando

git branch branchName <sha1> 

Editar: Como dice @seagullJS, el comando branch -D le indica el sha1, así que si no has cerrado el terminal, sin embargo, se vuelve muy fácil. Por ejemplo, esto elimina y luego se restaura de inmediato una rama llamada master2:

[email protected] /C/MyRepo (master) 
$ git branch -D master2 
Deleted branch master2 (was 130d7ba). <-- This is the SHA1 we need to restore it! 

[email protected] /C/MyRepo (master) 
$ git branch master2 130d7ba 
+52

Git te dice qué SHA1 era cuando se borró la rama, por lo que si simplemente la eliminas podría ser solo unas pocas líneas en la línea de comando. – seagullJS

+1

¡Gracias, esto me ahorró horas de trabajo! FYI uso git reflog para obtener el albertski

+0

Muchas gracias, encontré mis archivos "perdidos"! – inix

34

Si conoce la última SHA1 de la rama, puede intentar

git branch branchName <SHA1> 

Puede encontrar el SHA1 usando git reflog, se describe en la solución here.

+1

¿Cómo encuentro el sha1? –

+1

He actualizado mi respuesta sobre cómo encontrar el SHA1. – Chetan

+0

Muchas gracias! –

2

Primero: copia de seguridad de toda su directorio, incluido el directorio .git.

Segundo: Puede usar git fsck --lost-found para obtener la ID de las confirmaciones perdidas.

Tercero: rebase o combine en la confirmación perdida.

Cuarto: Siempre piensa dos veces antes de usar -D o --force con git :)

Usted también podría read this good discussion de cómo recuperarse de este tipo de error.

EDITAR: Por cierto, no ejecute git gc (o permita que se ejecute por sí mismo, es decir, no ejecute git fetch o algo similar) o puede perder sus compromisos para siempre.

+1

1 y 4 son IMO excesivo. – jwg

+0

Sí, es por eso que usamos git, para evitar tener que cargar con todo eso. Cada acción que ha cometido todavía está disponible para usted. – mateor

18

Si no has empujar la eliminación sin embargo, sólo tiene que hacer:

$ git checkout deletedBranchName 
+0

Esta respuesta hace que las extensiones de Git se cierren sobre "la rama que intentas empujar parece ser una nueva rama para este control remoto". Muchas gracias. – Omer

10

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

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

Para restaurar la rama, utilice:

git checkout -b <branch_name> <sha> 

por ejemplo:

git checkout -b branch_name e562d13 
3

Gracias, esto funcionó.

new_branch_name git branch sha1

new_branch_name git checkout

// puede ver a mi viejo comprobado en los archivos en mi rama de edad

Cuestiones relacionadas