Annulla annulla eliminazione ramo locale


377

Ho appena eliminato il ramo sbagliato con alcune modifiche sperimentali di cui ho bisogno git branch -D branchName.

Come recupero la filiale?


7
Sono contento di sapere che non sono l'unico zoppo che ha fatto questo (e ho dimenticato di spingere regolarmente per remotare una copia)
Ray

Risposte:


719

Puoi usare git reflog per trovare SHA1 dell'ultimo commit del ramo. Da quel punto, puoi ricreare un ramo usando

git branch branchName <sha1>

Modifica: Come dice @seagullJS, il branch -Dcomando ti dice sha1, quindi se non hai ancora chiuso il terminale diventa molto semplice. Ad esempio, questo elimina e quindi ripristina immediatamente un ramo denominato 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 ti dice che cosa era SHA1 quando il ramo è stato eliminato, quindi se lo elimini, potrebbero esserci solo poche righe nella riga di comando.
SeagullJS

se questo ramo esiste sul server, in alternativa, puoi usaregit branch branchName origin/branchName
Florian Castellane il

inoltre ho finito per usare git cherry-pick <sha1> per spostare il commit in branch
Akin Okegbile

54

Se conosci l'ultimo SHA1 del ramo, puoi provare

git branch branchName <SHA1>

È possibile trovare SHA1 utilizzando git reflog, descritto nella soluzione qui .


34

Se non hai ancora inviato la cancellazione, puoi semplicemente fare:

$ git checkout deletedBranchName

Questa risposta fa chiudere le estensioni di Git sul "ramo che stai cercando di spingere sembra essere un nuovo ramo per questo telecomando". Molte grazie.
Omer,

29

Se hai appena eliminato il ramo, vedrai qualcosa di simile nel tuo terminale:

Deleted branch branch_name(was e562d13)
  • dove e562d13 è un ID univoco (noto anche come "SHA" o "hash"), con questo è possibile ripristinare il ramo eliminato.

Per ripristinare il ramo, utilizzare:

git checkout -b <branch_name> <sha>

per esempio :

git checkout -b branch_name e562d13 

4

Primo: eseguire il backup dell'intera directory, inclusa la directory .git.

Secondo: è possibile utilizzare git fsck --lost-foundper ottenere l'ID dei commit persi.

Terzo: rebase o unione sul commit perso.

Quarto: pensaci sempre due volte prima di usare -D o --force con git :)

Puoi anche leggere questa buona discussione su come recuperare questo tipo di errore.

EDIT: A proposito, non correre git gc(o non lasciarlo correre da solo - cioè non correre git fetcho qualcosa di simile) o potresti perdere i tuoi impegni per sempre.


1
1 e 4 sono eccessivi IMO.
jwg

sì, è per questo che usiamo git, per evitare di dover portare tutto in giro. Ogni azione che hai commesso è ancora a tua disposizione.
mateor

4

Grazie, ha funzionato.

git branch nome_branco sha1

git checkout new_branch_name

// può vedere i miei vecchi file registrati nel mio vecchio ramo


3

Segui questi passi:

1: inserire:

git reflog show 

Questo mostrerà tutta la cronologia dei commit, devi selezionare lo sha-1 che ha l'ultimo commit che vuoi recuperare

2: crea un nome di filiale con l' ID Sha-1 selezionato, ad es. 8c87714

git branch your-branch-name 8c87714

0

Questo ha funzionato per me:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.