Git undo local branch delete


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

¿Cómo puedo recuperar la rama?

Author: Stefan Kendall, 2010-10-26

6 answers

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

git branch branchName <sha1>

Edit: Como dice @seagullJS, el comando branch -D le dice el sha1, por lo que si aún no ha cerrado la terminal, se vuelve realmente fácil. Por ejemplo, esto elimina e inmediatamente restaura 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
 562
Author: bobDevil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-13 08:40:35

Si conoces el último SHA1 de la rama, puedes probar

git branch branchName <SHA1>

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

 38
Author: Chetan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-26 17:13:17

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

$ git checkout deletedBranchName
 22
Author: amichaud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 16:07:04

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 el "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 
 10
Author: Dev911,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 05:32:27

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

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

Tercero: rebase o combine en el commit perdido.

Cuarto: Siempre piénsalo dos veces antes de usar -D o force force con git:)

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

EDITAR: Por cierto, no ejecutar git gc (o permitir que se ejecute por sí mismo-es decir, no ejecutar git fetch o cualquier cosa similar) o puedes perder tus commits para siempre.

 3
Author: Cameron Skinner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-26 16:57:44

Gracias, esto funcionó.

Git branch new_branch_name sha1

Git checkout new_branch_name

/ / puede ver mis antiguos archivos registrados en mi antigua rama

 3
Author: Rajeev Jayaswal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 16:00:17