11.1 Gałęzie w git
Praca z gałęziami (branches) w Git — to jeden z kluczowych aspektów zarządzania wersjami, który pozwala na równoległe prowadzenie kilku linii rozwojowych w jednym repozytorium. Rozgałęzianie sprawia, że Git jest potężnym narzędziem do współpracy, eksperymentów i zarządzania różnymi wersjami projektu.
Możesz myśleć o gałęziach w git jak o folderach, gdzie git kopiuje twój projekt. Masz główny folder twojego projektu w twoim lokalnym repozytorium — master, a git może stworzyć kopie tego folderu, abyś mógł tam eksperymentować i nie uszkodzić głównego, dobrze działającego kodu. Takie foldery-kopie nazywają się gałęziami — branches.
Gałęzie — to alternatywne wersje kodu. Powiedzmy, że chcesz coś przeprojektować w dużym projekcie, przeprowadzić eksperyment, co do którego nie jesteś do końca pewny. Jak byś to zrobił bez git?
Można by skopiować projekt do nowego folderu i spróbować wszystko w nim zmienić. Jeśli rezultat ci się spodoba, to możesz go skopiować do głównego folderu. Jeśli nie, zapomnij o nim, albo całkowicie usuń.
Albo weźmy przykład z życia. Powiedzmy pisanie książki:
- Masz rękopis książki (główna gałąź).
- Chcesz spróbować zmienić zakończenie (tworzenie nowej gałęzi).
- Piszesz nowe zakończenie w oddzielnym dokumencie (praca w nowej gałęzi).
- Jeśli nowe zakończenie jest lepsze, zastępujesz stare w rękopisie (scalanie gałęzi).
- Usuwasz oddzielny dokument z nowym zakończeniem (usunięcie gałęzi).
11.2 Tworzenie gałęzi
Tworzenie gałęzi w IntelliJ IDEA jest bardzo proste:
Wpisz nazwę gałęzi:
IntelliJ IDEA od razu wyświetli nazwę twojej bieżącej gałęzi na górze w menu:
Co tam było wcześniej?
Była tam nazwa twojej pierwszej i głównej gałęzi — master.
Teraz wyświetla się test, co oznacza, że Git (pod nadzorem IntelliJ IDEA) nie tylko stworzył nową gałąź, ale także od razu się na nią przełączył.
Dodajmy jakiś kod do pliku main.html w bieżącej gałęzi (test) i zatwierdźmy go:
11.3 Przełączanie się między gałęziami
Krok 1. Wybieramy gałąź.
Teraz przełączmy się na naszą starą gałąź. Kliknijmy na górne menu i co tam widzimy?
Nie bój się — to wszystko jest proste:
Local — to lista gałęzi twojego lokalnego repozytorium git. Są tam dwie:
- test
- master
Remote — to twoje zdalne repozytorium, które znajduje się na serwerze GitHub. Tam wypchnęliśmy twoje zmiany, ale nowej gałęzi tam nie ma, co jest logiczne. Zdalne repozytorium nosi nazwę origin, i jest tam tylko gałąź master.
Recent — to po prostu lista nazw ostatnich gałęzi, z którymi pracowałeś: ten punkt IntelliJ IDEA dodaje dla wygody i szybkości.
Nazwa origin/master po prawej od nazwy lokalnego repozytorium — to nazwa zdalnego repozytorium, z którym jest teraz zsynchronizowane, i gdzie będą wypychane zmiany.
Krok 2. Ładujemy kod gałęzi do bieżącego folderu.
Krok 3. Sprawdzamy.
U mnie wyświetla się gałąź „master” i stary kod:
11.4 Scalanie gałęzi
Spróbujmy teraz połączyć kod z naszych dwóch gałęzi.
Krok 1. Na początek dodajmy do naszego projektu jeszcze jeden plik — index.html i napiszmy w nim jakiś kod:
- Tworzymy plik index.html
- Piszemy w nim kod <h1>Hello</h1>
- Zatwierdzamy plik
Tak wyglądają dwa moje pliki w gałęzi master:
Krok 2. Scalanie gałęzi.
Scalimy do naszej bieżącej gałęzi (master) zmiany, które zostały dokonane w gałęzi test.
Skorzystamy z tej okazji z górnego menu i komendy „Merge ‘test’ into ‘master’”:
Krok 3. Sprawdzamy rezultat.
Sprawdzamy:
- Na górze nadal wyświetla się gałąź master
- Plików mamy 2: index.html i main.html
- Plik main.html zawiera kod, który został dodany w gałęzi test
11.5 Konflikty przy scalaniu
Czasami przy scalaniu gałęzi mogą wystąpić konflikty.
Jeśli wprowadzisz zmiany w jednym pliku w różnych gałęziach i spróbujesz je scalić, może powstać konflikt.
Konflikt plików tekstowych
Git to bardzo sprytny system — rozumie typy plików. Jeśli wprowadzisz zmiany w różnych miejscach plików, które uważa za tekstowe, po prostu przeniesie zmiany z jednego pliku do drugiego w odpowiednie miejsce (tak, jakby to zrobił człowiek).
Konflikt plików binarnych
Ale jeśli poprawisz gdzieś obrazek lub dokument, Git nie będzie próbował połączyć ich części w jeden: po prostu zaproponuje ci wybór, którą wersję pliku chcesz zachować w bieżącej gałęzi.
Ręczne rozwiązywanie konfliktów
Jeśli wprowadzisz zmiany w tym samym miejscu pliku tekstowego, Git nie będzie w stanie poprawnie połączyć różnych wersji i zaproponuje ci to zrobić:
Tak to może wyglądać:
Co tu widzisz:
- Z lewej — zawartość pliku main.html gałęzi master
- Z prawej — zawartość pliku main.html gałęzi test
- W środku IntelliJ IDEA proponuje napisać ostateczną wersję kodu (można kliknąć na przyciski „>>” i „<<”, aby automatycznie wstawić zmiany z jakiegoś pliku)
Wybrałem wersję master i dopisałem kod ręcznie. Tak to wyszło:
11.6 Historia zmian
Jeszcze coś przydatnego i interesującego. Możesz zobaczyć historię zmian dowolnego pliku, klikając na przycisk Show History. Są dwa miejsca, gdzie może się ona znajdować. Znajdź je.
Tak wygląda historia zmian u mnie dla pliku main.html:
Wyjaśnienia:
-
Z lewej widzisz historię zmian konkretnego pliku:
- Im zmiana nowsza, tym wyżej, im starsza – tym niżej
- Wyświetla się tu także historia scalania gałęzi
- Z prawej — zmiany wprowadzone w konkretnym commicie
GO TO FULL VERSION