„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.
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
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.