Scalanie Git – bez opcji

Git Merge No Ff Option



Możliwość łatwego łączenia git jest jedną z jego mocnych stron. Podczas scalania git używa szybkiego scalania, gdy zauważy, że HEAD bieżącej gałęzi jest przodkiem zatwierdzenia, które próbujesz scalić. W scalaniu do przodu nie ma nowego zatwierdzenia. Git po prostu przesuwa wskaźnik. Jeśli to zachowanie nie jest pożądane, możesz użyć flagi no-ff, aby utworzyć nowe zatwierdzenie dla scalenia.

Jak wygląda scalanie zi bez przewijania do przodu

Po szybkim przyspieszeniu twoja historia git będzie wyglądać tak:







C0 —> C1 —> C2—> C3



Dla tej samej liczby zatwierdzeń, oto historia scalania bez przewijania do przodu:







W pierwszym przypadku nic nie wskazuje na istnienie rozgałęzień. W drugim przypadku historia pokazuje zatwierdzenie C4, aby wskazać, gdzie nastąpiło scalenie.

Idąc przez przykład

Stworzysz repozytorium git, utworzysz gałąź, a następnie spróbujesz scalać zi bez fast-forward.



Sekcja 1: Konfiguracja

Najpierw możesz utworzyć repozytorium git, wykonując następujące czynności:

$ mkdir mój_projekt
$ cd mój_projekt
$ git init
$ dotknij a.txt
$ git add -A
$ git commit -m 'C0: Dodawanie a.txt'

Teraz stwórzmy gałąź o nazwie features i zatwierdźmy kilka zmian:

$ Funkcje gałęzi git
$ Funkcje kasy git
$ dotknij b.txt
$ git add -A
$ git commit -m 'C1: Dodawanie b.txt'
$ dotknij c.txt
$ git add -A
$ git commit -m 'C2: Dodawanie c.txt'
$ dotknij d.txt
$ git add -A
$ git commit -m 'C3: Dodawanie d.txt'

Sekcja 2: Scal z szybkim przekazywaniem

Wróćmy do gałęzi master i włączmy do niej gałąź features:

$git kasagospodarz
$git scalaniacechy

Wyjście:

Aktualizowanie 08076fb..9ee88eb
Przewijanie do przodu
b.txt | 0
c.txt | 0
d.txt | 0
Zmieniono 3 pliki, 0 wstawień (+), 0 usunięć (-)
utwórz tryb 100644 b.txt
utwórz tryb 100644 c.txt
utwórz tryb 100644 d.txt

Jeśli sprawdzisz historię, zobaczysz:

$ git log --oneline
9ee88eb C3: Dodawanie d.txt
c72b92c C2: Dodawanie c.txt
2e4039e C1: Dodawanie b.txt
08076fb C0: Dodawanie a.txt

Tak więc wszystkie zmiany z gałęzi Features znajdują się teraz w gałęzi master. Jeśli będziesz kontynuować wprowadzanie zmian do wzorca, nie ma możliwości sprawdzenia, kiedy gałąź funkcji została z nią połączona.

Sekcja 3: Bez szybkiego przekazywania

Powtórz sekcję 1 dla nowego folderu.

Następnie spróbuj scalić bez przewijania do przodu:

$git kasagospodarz
$git scalania --no-offfunkcja

W domyślnym edytorze tekstu git otworzy się następujące elementy:

Scal oddział'cechy'
# Proszę wpisać komunikat zatwierdzenia, aby wyjaśnić, dlaczego to połączenie jest konieczne,
# zwłaszcza jeśli łączy zaktualizowane upstream z gałęzią tematyczną.
#
# Linie zaczynające się od '#' będą ignorowane, a pusta wiadomość zostanie przerwana
# zatwierdzenie.

Zmodyfikuj komentarze. W takim przypadku możesz po prostu dodać C4: przed Merge branch „Features”. Wynik powinien wyglądać tak:

Scalanie wykonane przez strategię „rekurencyjną”.
b.txt | 0
c.txt | 0
d.txt | 0
Zmieniono 3 pliki, 0 wstawień (+), 0 usunięć (-)
utwórz tryb 100644 b.txt
utwórz tryb 100644 c.txt
utwórz tryb 100644 d.txt

Teraz, jeśli sprawdzisz historię, powinna wyglądać następująco:

$ git log --oneline
e071527 C4: Scal „funkcje” gałęzi
bb79c25 C3: Dodawanie d.txt
692bd8c C2: Dodawanie pliku c.txt
a0df62a C1: Dodawanie b.txt
7575971 C0: Dodawanie a.txt

Widać, że nawet jeśli masz dokładnie te same zmiany, ta wersja scalania ma dodatkowe zatwierdzenie C4, które oznacza scalenie gałęzi funkcji w master.

Wniosek

Flaga git merge no-off pomaga stworzyć bardziej czytelną historię. Pozwala na umieszczenie tagów, które wyraźnie pokazują, gdzie nastąpiło scalenie. Pozwala zaoszczędzić czas i wysiłek podczas debugowania.

Dalsze badanie:

Bibliografia: