Git undo local branch delete

377

Je viens de supprimer la mauvaise branche avec quelques changements expérimentaux dont j'ai besoin git branch -D branchName.

Comment récupérer la branche?

Stefan Kendall
la source
7
Heureux de savoir que je ne suis pas le seul boiteux à avoir fait cela (et j'ai oublié de pousser régulièrement pour en éloigner une copie)
Ray

Réponses:

719

Vous pouvez utiliser git reflog pour trouver le SHA1 du dernier commit de la branche. À partir de là, vous pouvez recréer une branche à l'aide de

git branch branchName <sha1>

Edit: Comme le dit @seagullJS, la branch -Dcommande vous indique le sha1, donc si vous n'avez pas encore fermé le terminal, cela devient vraiment facile. Par exemple, cela supprime puis restaure immédiatement une branche nommée 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
bobDevil
la source
71
Git vous indique ce qu'était le SHA1 lorsque la branche est supprimée, donc si vous la supprimez, il se peut que ce ne soit que quelques lignes dans la ligne de commande.
seagullJS
si cette branche existe sur le serveur, vous pouvez également utilisergit branch branchName origin/branchName
Florian Castellane
en plus j'ai fini par utiliser git cherry-pick <sha1> pour déplacer le commit vers la branche
Akin Okegbile
54

Si vous connaissez le dernier SHA1 de la branche, vous pouvez essayer

git branch branchName <SHA1>

Vous pouvez trouver le SHA1 en utilisant git reflog, décrit dans la solution ici .

Chétan
la source
34

Si vous n'avez pas encore poussé la suppression, vous pouvez simplement faire:

$ git checkout deletedBranchName
amichaud
la source
Cette réponse fait que Git Extensions se ferme sur "la branche que vous essayez de pousser semble être une nouvelle branche pour cette télécommande." Merci beaucoup.
Omer
29

Si vous venez de supprimer la branche, vous verrez quelque chose comme ça dans votre terminal:

Deleted branch branch_name(was e562d13)
  • où e562d13 est un ID unique (alias "SHA" ou "hachage"), avec cela, vous pouvez restaurer la branche supprimée.

Pour restaurer la branche, utilisez:

git checkout -b <branch_name> <sha>

par exemple :

git checkout -b branch_name e562d13 
Pigiste
la source
4

Premièrement: sauvegardez l'intégralité de votre répertoire, y compris le répertoire .git.

Deuxièmement: vous pouvez utiliser git fsck --lost-foundpour obtenir l'ID des commits perdus.

Troisièmement: rebaser ou fusionner sur le commit perdu.

Quatrièmement: réfléchissez toujours à deux fois avant d'utiliser -D ou --force avec git :)

Vous pouvez également lire cette bonne discussion sur la façon de récupérer de ce type d'erreur.

EDIT: Soit dit en passant, ne courez pas git gc(ou ne le laissez pas s'exécuter seul - c'est-à-dire ne courez pas git fetchou quelque chose de similaire) ou vous risquez de perdre vos commits pour toujours.

Cameron Skinner
la source
1
1 et 4 sont exagérés OMI.
jwg
oui, c'est pourquoi nous utilisons git, pour éviter d'avoir à transporter tout ça. Chaque action que vous avez commise est toujours à votre disposition.
maté
4

Merci, cela a fonctionné.

git branch new_branch_name sha1

git checkout new_branch_name

// peut voir mes anciens fichiers archivés dans mon ancienne branche

Rajeev Jayaswal
la source
3

Suivez ces étapes:

1: Entrez:

git reflog show 

Cela affichera tout l'historique des commits, vous devez sélectionner le sha-1 qui a le dernier commit que vous souhaitez récupérer

2: créez un nom de branche avec l' ID Sha-1 que vous avez sélectionné, par exemple: 8c87714

git branch your-branch-name 8c87714
greencheese
la source
0

Cela a fonctionné pour moi:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Alej priv
la source