Git Reflog - Jak odzyskać usuniętą gałąź, która nie została scalona



Ten artykuł na temat Git Reflog to obszerny przewodnik po tym, jak przywrócić usunięte rozgałęzienia w Git za pomocą Git Reflog.

„Czy zdarzyło Ci się zgubić gałąź, której kod źródłowy nie został jeszcze scalony w gałęzi„ release ”lub„ main ”? A co jeśli chcesz ponownie wygenerować usuniętą gałąź, mimo że jej praca została już scalona z główną gałęzią? ” . Cóż, jedynym rozwiązaniem takich scenariuszy jest Idź Reflog .

Pomogę Ci w tym artykule o Git Reflogzrozumieć scenariusze, w których praca nad gałęzią może zostać utracona i jak ją odzyskać.W tym artykule omówiono również podejście, które można zastosować, aby zapobiec niezamierzonej utracie gałęzi podczas pracy w dużym projekcie.





    1. Co to jest Git Reflog?
    2. Jak i kiedy oddział zostanie usunięty?
    3. Odzyskaj usunięty oddział
    4. Jaka praca jest przywracana po odzyskaniu usuniętej gałęzi?
    5. Polecenia podrzędne Git Reflog

Zacznijmy więc od tego artykułu.



Rozważmy scenariusz, m. Inaintainer musi scalić wiele gałęzi funkcji od różnych współpracowników, a następnie w końcu je usunąć, ale gałąź jest usuwana przypadkowo, zanim praca będzie mogła zostać scalona?

Cóż, zanim przejdę do tego artykułu, powiem ci, że w Git nie jest to możliwe. są bezpieczne i działają jak posterunek czekowy, który Ci na to nie pozwala. A więc w tym miejscu pojawia się Git Reflog.

Co to jest Git Reflog?

PlikPolecenie „reflog” utrzymuje plik ślad każdą zmianę dokonaną w odniesieniach (gałęzie lub tagi) repozytorium i przechowuje historię dziennika gałęzi i tagów, które zostały utworzone lokalnie lub wyewidencjonowane. Dzienniki referencyjne, takie jak migawka zatwierdzenia, kiedy gałąź została utworzona lub sklonowana, wyewidencjonowana, zmieniona nazwa lub wszelkie zatwierdzenia dokonane w gałęzi są obsługiwane przez i wymienione przez polecenie „reflog”.



Uwaga: Oddział będzie można odzyskać z katalogu roboczego tylko wtedy, gdy gałąź kiedykolwiek istniała w lokalnym repozytorium, tj. gałąź została utworzona lokalnie lub wyewidencjonowana ze zdalnego repozytorium w twoim lokalnym repozytorium, aby Git mógł przechowywać swoje dzienniki historii odniesienia.

To polecenie należy wykonać w repozytorium, które miało utraconą gałąź. Jeśli weźmiesz pod uwagęsytuacji ze zdalnym repozytorium, musisz wykonać polecenie reflog na komputerze dewelopera, który miał gałąź.

Komenda: przejdź do reflog

Teraz, gdy już wiesz, czym jest Git Reflog, pozwól namspróbować usunąć zarówno scaloną, jak i nie scaloną gałąź i zobaczyć, jak sobie z tym radzi Git?

Zmienna instancji w przykładzie java

Krok 1: Wymień gałęzie, które są scalane w master

Najpierw sprawdź w „ mistrz Gałąź, jeśli jesteś w innej gałęzi za pomocą polecenia:

Mistrz kasy $ git

Wynik

Git Checkout Master - Git Reflog - Edureka

Teraz, aby uzyskać listę połączonych gałęzi, wspomnij o następującym poleceniu:

$ git branch --merged

Wynik:

Krok 1.1: Następnie usuń scaloną gałąź:

$ git branch -d issue # 902

Wynik:

Oddział „numer 902” został pomyślnie usunięty, ponieważ jest już włączony do oddziału „głównego”.

Krok 2: Teraz wypiszmy gałęzie, które nie są połączone w master.

$ git branch --no-scaled

Wynik

Krok 2.2: Na koniec usuńmy nie scaloną gałąź za pomocą następującego polecenia:

$ git branch -d prepod

Jeśli spróbujesz usunąć jedną z gałęzi z niedokończoną pracą, powiedz gałąź „preprod”, git wyświetli komunikat ostrzegawczy.

Wynik

Zanim powiem ci, jak odzyskać dane w tym artykule na Git Reflog, powiem ci, co dokładnie dzieje się, gdy gałąź zostanie usunięta iw jakich okolicznościach można ją odzyskać.

Jak i kiedy oddział zostanie usunięty?

Jak wiemy, Git to Rozproszony system kontroli wersji (DVCS), każda maszyna z klonem lub kopią repozytorium działa jako jedno i drugie węzeł i a centrum . Tooznacza, że ​​każda maszyna będzie miała własną kopię całego kodu repozytorium i historii.Nie trzeba mówić, że będziesz dzielenie się Twoja praca z innymi i wydawniczy to samo.

Dlatego w takich scenariuszach mogą wystąpić 3 przypadki, w których oddział zostanie usunięty w scenariuszu w świecie rzeczywistym, w którym wielu współpracowników pracuje nad dużym projektem. Mogą to być następujące przypadki:

Przypadek 1 - Programista może scalić lub usunąć gałąź

Rozważmy scenariusz, w którym programista scala lokalnie gałąź funkcji z gałęzią główną, a następnie usuwa gałąź funkcji za pomocą polecenia „ git branch ”Polecenie z„ - re ”, Jak widać na wcześniejszych zrzutach ekranu.

Komenda: „Git branch -d nazwa_gałęzi”

Może się również zdarzyć, że deweloper zdecyduje się skasować zmiany w gałęzi i zdecyduje się usunąć gałąź bez łączenia jej z inną gałęzią za pomocą następującego polecenia:

Komenda: „Git branch -D nazwa_gałęzi”

Dzięki powyższemu poleceniu programista jestna siłę usuń gałąź, nadpisując ostrzeżenie git

$ git branch -D preprod

Wynik

Uwaga : Gałąź „preprod” nie będzie już wyświetlana po uruchomieniu polecenia „git branch”. Więc, ynasza praca zapisana w tej gałęzi zostanie utracona.

Przypadek 2 - Deweloper usuwa gałąź we współdzielonym repozytorium

Rozważmy scenariusz, w którym programista z dostępem do odczytu / zapisu próbuje wymusić usunięcie zdalnej gałęzi przezużywając polecenia „git push” z flagą „–delete”.

$ git push origin --delete quickfix

Wynik

Poza tym może również zaistnieć przypadek, w którym nieautoryzowany lub złośliwy użytkownik zmusza do usunięcia zdalnej gałęzi.W takim przypadku opiekun będzie mógł odzyskać usuniętą gałąź „quickfix” tylko wtedy, gdy programistawcześniej sprawdzili tę gałąź. W tym scenariuszu jego lokalne repozytorium nadal będzie zawierało dzienniki referencyjne.

Jeśli opiekun nie może odzyskać oddziału, wówczas właściciel oddziału, który go usunął, musi odzyskać od swoich lokalnych reflogów.

Przypadek 3 - skrypt przechwytujący z super przywilejami usuwa gałąź

Może to być rzadki, ale możliwy scenariusz, w którym skrypt przechwytujący zostanie wyzwolony w pewnym zdarzeniu operacji git i wymuś usunięcie gałęzi, które nie zostały jeszcze scalone. Możeszrozważ jedno z wyżej wymienionych poleceń, które jest skryptowane w skrypcie przechwytującym z uprawnieniami sudo.

Teraz, gdy wiesz, co się stanie, gdy usuniesz gałąź, przejdźmy do tego artykułu na temat Git Reflog i zobaczmy, jak odzyskać utraconą gałąź.

Odzyskaj usuniętą gałąź za pomocą Git Reflog

Krok 1 : Dzienniki historii wszystkich odniesień

Uzyskaj listę wszystkich zapisanych lokalnie dzienników historii dla wszystkich odniesień („master”, „uat” i „prepod”) w tym repozytorium.

przejdź do reflog

Krok 2 : Zidentyfikuj stempel historii

Jak widać z powyższej migawki, plik Podświetlony identyfikator zatwierdzenia: e2225bb wraz z indeksem HEAD: 4 jest tym, kiedy „ odsprzedaż Gałąź została utworzona z bieżącego wskaźnika HEAD wskazującego na Twoją najnowszą pracę.

Krok 3 : Wyzdrowieć

Aby odzyskać plik „Odsprzedaż „Gałąź użyj polecenia„Git checkout” przekazuje odniesienie do wskaźnika HEAD z indeksem id - 4.To jest odniesienie do wskaźnika, gdy utworzono gałąź „preprod”. Identyfikator długiego zatwierdzenia podświetlony na zrzucie ekranu wyjścia.

git checkout -b preprod HEAD @ {4}

Wynik

I voila! „ odsprzedaż „Oddział jest odzyskiwany z całym kodem źródłowym.

UWAGA : Pozwól mi bDodaj reakcję polecenia „git checkout” użytego powyżej i pomoże Ci lepiej zrozumieć:

jak używać przycinania w java

Polecenie „git checkout” jest przeciążonym poleceniem (podobnie jak każda przeciążona funkcja Java). Jest to część, w której odzyskiwana jest rzeczywista gałąź.

To pojedyncze polecenie najpierw sprawdza wcześniejszą sygnaturę czasową historii wskazaną przez HEAD @ {4} wskaźnik a następnie tworzy gałąź o nazwie „preprod” przy użyciu opcji „-b”, a także przełącza katalog roboczy do nowo utworzonej gałęzi.

Oznacza to, że przełączana gałąź będzie z „master” na „preprod”, jak wskazano na ekranie wyjściowym.Możesz teraz połączyć go z gałęzią „master” lub „release” zgodnie z modelem rozgałęzienia.

Teraz, gdy wiesz, jak przywrócić gałąź, powiem ci, jaka praca jest przywracana po odzyskaniu usuniętej gałęzi.

Jaka praca jest przywracana po odzyskaniu usuniętej gałęzi?

Pliki, które zostały schowane i zapisane na liście indeksu skrytki zostaną odzyskane. Wszelkie nieśledzone pliki zostaną utracone. Również jaDobrze jest zawsze przygotowywać i oddawać swoją pracę lub je przechowywać.

Aby pobrać referencje dziennika z określonej gałęzi lub tagu, uruchom polecenie - „git reflog”.

Przykład: Aby sprawdzić referencje dziennika samej gałęzi „uat”, użyj polecenia - „git reflog uat”.

Polecenia podrzędne Git Reflog

przejdź do reflog

Polecenie otwierające stronę podręcznika

$ git reflog --help

Wynik

przejdź do reflog pokazać

Wyświetla dzienniki odwołania podane w wierszu poleceń.

git reflog show master @ {0}

przejdź do reflog wygasać

To polecenie służy do usuwania starszych wpisów reflog.

git reflog wygasa

przejdź do reflog usunąć

To polecenie usuwa pojedyncze wpisy z historii reflogów.

git reflog delete

przejdź do reflog istnieje

To polecenie sprawdza, czy ref (gałąź lub tag) ma wpisy historii reflog - log.

git reflog istnieje

Oprócz wyżej wymienionych poleceń, polecenie „Git Reflog” przyjmuje różne podpolecenia i różne opcje w zależności od wspomnianych podpoleceń. Do dalszego czytania uruchom „ git reflog –help ”Z okna terminala.

Na tym kończymy ten artykuł o Git Reflog.Intencją DevOps jest szybsze i bardziej niezawodne tworzenie oprogramowania lepszej jakości, jednocześnie zachęcając do lepszej komunikacji i współpracy między zespołami. Jeśli intryguje Cię ten artykuł, c heck out the autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie Edureka DevOps Certification Training pomaga uczniom zrozumieć, czym jest DevOps i zdobyć wiedzę na temat różnych procesów i narzędzi DevOps, takich jak Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack i GIT do automatyzacji wielu kroków w SDLC.

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy w artykule „Git Reflog”, a my skontaktujemy się z Tobą jak najszybciej.