Omówienie historii usługi Git

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Usługa Git przechowuje historię jako graf migawek — nazywanych zatwierdzeniami — całego repozytorium. Każde zatwierdzenie zawiera również wskaźnik do co najmniej jednego poprzedniego zatwierdzenia. Zatwierdzenia mogą zawierać wiele elementów nadrzędnych, tworząc historię, która wygląda jak graf zamiast prostej. Ta różnica w historii jest niezwykle ważna i jest głównym powodem, dla którego użytkownicy uważają git za mylące.

Uwaga

Jeśli nie możesz znaleźć zmiany w historii usługi Git, którą znasz, dowiedz się więcej o tym, jak uproszczenie historii usługi Git działa w usłudze Git straciło moje zmiany: Zapoznaj się z uproszczeniem historii usługi Git.

Podstawy historii zatwierdzeń

Zacznij od prostego przykładu historii: repozytorium z 3 zatwierdzeniami liniowymi.

trzy zatwierdzenia w wierszu

Zatwierdzenie A jest elementem nadrzędnym zatwierdzenia B, a zatwierdzenie B jest elementem nadrzędnym zatwierdzenia C. Ta historia wygląda bardzo podobnie do CVCS. Strzałka wskazująca zatwierdzenie języka C jest gałęzią. Nazwa jest nazwana main , ponieważ jest to domyślna nazwa gałęzi głównej w repozytorium Git. Gałęzie są wskaźnikami do określonych zatwierdzeń, dlatego rozgałęzianie jest tak lekkie i łatwe w usłudze Git.

Kluczową różnicą w usłudze Git w porównaniu z CVCS jest to, że mam własną pełną kopię repozytorium. Chcę zachować synchronizację repozytorium lokalnego z repozytorium zdalnym, uzyskując najnowsze zatwierdzenia z repozytorium zdalnego. W tym celu pobierzę gałąź główną za pomocą następującego polecenia:

git pull origin main

Spowoduje to skopiowanie wszystkich zatwierdzeń z main gałęzi repozytorium zdalnego (wywoływanego origin domyślnie) do main gałęzi repozytorium lokalnego. Operacja ściągania skopiowała jedno nowe zatwierdzenie, a main gałąź w repozytorium lokalnym wskazuje teraz to nowe zatwierdzenie.

czwarte zatwierdzenie, D, jest dodawane do wiersza

Omówienie historii gałęzi

Teraz chcę wprowadzić zmianę w kodzie. Często istnieje wiele aktywnych gałęzi, w których pracujesz równolegle z różnymi funkcjami. Jest to ostry kontrast do CVCS, gdzie nowe gałęzie są ciężkie i rzadko tworzone. Pierwszym krokiem jest wyewidencjonować nową gałąź przy użyciu następującego polecenia:

git checkout -b cool-new-feature

Jest to skrót łączący dwa polecenia: git branch cool-new-feature aby utworzyć gałąź, po której git checkout cool-new-feature następuje rozpoczęcie pracy w gałęzi.

Dodawana jest funkcja cool-new-branch

Dwie gałęzie wskazują teraz to samo zatwierdzenie. Wprowadzim kilka zmian w cool-new-feature gałęzi w dwóch nowych zatwierdzeniach, E i F.

dodano dwa nowe zatwierdzenia

Moje zatwierdzenia są osiągalne przez cool-new-feature gałąź, ponieważ zostały one wykonane w tej gałęzi. Wykonano moją funkcję i chcę ją scalić z elementem main. W tym celu użyję następującego polecenia:

git merge cool-feature main

po scaleniu

Struktura grafów historii staje się widoczna w przypadku scalania. Usługa Git tworzy nowe zatwierdzenie po scaleniu gałęzi z inną gałęzią. Jest to zatwierdzenie scalania. Nie ma żadnych zmian zawartych w tym zatwierdzeniu scalania, ponieważ nie miałem konfliktów. Gdybym miał konflikty, zatwierdzenie scalania obejmowało zmiany potrzebne do rozwiązania tych konfliktów.

Historia w świecie rzeczywistym

Oto przykład historii usługi Git, która bardziej przypomina kod w aktywnym tworzeniu w zespole. Istnieją trzy osoby, które scalają zatwierdzenia z własnych gałęzi w gałęzi głównej w tym samym czasie.

dziennik konsoli usługi Git Graph

Teraz, gdy już wiesz, jak gałęzie i scalają kształt grafu, nie powinno to być zbyt przerażające!