Git cofnij usunięcie lokalnego oddziału


375

Właśnie usunąłem niewłaściwą gałąź z kilkoma eksperymentalnymi zmianami, których potrzebuję git branch -D branchName.

Jak mogę odzyskać oddział?


7
Cieszę się, że nie jestem jedynym kulawcem, który to zrobił (i zapomniałem regularnie naciskać na zdalną kopię)
— Ray

Odpowiedzi:


717

Możesz użyć git reflog, aby znaleźć SHA1 ostatniego zatwierdzenia oddziału. Od tego momentu możesz odtworzyć gałąź za pomocą

git branch branchName <sha1>

Edycja: Jak mówi @seagullJS, branch -Dpolecenie powie ci sha1, więc jeśli nie zamknąłeś jeszcze terminala, stanie się to naprawdę łatwe. Na przykład to usuwa, a następnie natychmiast przywraca gałąź o nazwie 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 mówi ci, czym był SHA1, gdy gałąź jest usuwana, więc jeśli ją po prostu usuniesz, może to być tylko kilka linii w linii poleceń.
— seagullJS

jeśli ta gałąź istnieje na serwerze, alternatywnie możesz użyćgit branch branchName origin/branchName
— Florian Castellane

ponadto skończyłem z użyciem git cherry-pick <sha1>, aby przenieść zatwierdzenie do gałęzi
— Akin Okegbile

54

Jeśli znasz ostatni SHA1 oddziału, możesz spróbować

git branch branchName <SHA1>

Możesz znaleźć SHA1 za pomocą git reflog, opisanego w rozwiązaniu tutaj .


34

Jeśli nie nacisnąłeś jeszcze usunięcia, możesz po prostu zrobić:

$ git checkout deletedBranchName

Ta odpowiedź powoduje, że rozszerzenia Git zamykają się na temat „gałąź, którą próbujesz wypchnąć, wydaje się nową gałęzią tego pilota”. Wielkie dzięki.
— Omer

28

Jeśli właśnie usunąłeś gałąź, zobaczysz coś takiego w swoim terminalu:

Deleted branch branch_name(was e562d13)
  • gdzie e562d13 jest unikalnym identyfikatorem (inaczej „SHA” lub „hash”), dzięki czemu możesz przywrócić usuniętą gałąź.

Aby przywrócić gałąź, użyj:

git checkout -b <branch_name> <sha>

na przykład :

git checkout -b branch_name e562d13 

4

Po pierwsze: wykonaj kopię zapasową całego katalogu, w tym katalogu .git.

Po drugie: możesz użyć git fsck --lost-found aby uzyskać identyfikator utraconych zatwierdzeń.

Po trzecie: bazuj lub łącz zgubione zatwierdzenie.

Po czwarte: Zawsze myśl dwa razy przed użyciem -D lub --force z git :)

Możesz także przeczytać tę dobrą dyskusję o tym, jak wyjść z tego rodzaju błędu.

EDYCJA: Nawiasem mówiąc, nie uruchamiaj git gc(lub nie pozwól, aby uruchomił się sam - tj. Nie uruchamiaj git fetchani nic podobnego), bo możesz stracić swoje zobowiązania na zawsze.


1
1 i 4 to przesada IMO.
— jwg

tak, dlatego używamy git, aby uniknąć konieczności noszenia tego wszystkiego przy sobie. Każde popełnione działanie jest nadal dostępne.
— współtwórca

4

Dzięki, działało.

gałąź git nowa_nazwa_gałęzi sha1

git kasa nowa_nazwa_gałęzi

// widzę moje stare zarejestrowane pliki w mojej starej gałęzi


3

Wykonaj następujące kroki:

1: Wprowadź:

git reflog show 

Spowoduje to wyświetlenie całej historii zatwierdzeń, musisz wybrać sha-1, który ma ostatnie zatwierdzenie, które chcesz odzyskać

2: utwórz nazwę oddziału z wybranym identyfikatorem Sha-1 , np .: 8c87714

git branch your-branch-name 8c87714

0

To działało dla mnie:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.