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 równolegle prowadzić kilka linii rozwoju w jednym repozytorium. Rozgałęzienie czyni Git 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 jako o folderach, gdzie Git kopiuje twój projekt. Masz główny folder swojego projektu w lokalnym repozytorium — master. Git może stworzyć kopie tego folderu, byś mógł eksperymentować bez ryzyka uszkodzenia głównego kodu. Takie foldery-kopie nazywane są gałęziami — branches.
Gałęzie to alternatywne wersje kodu. Załóżmy, że chcesz coś zmienić w dużym projekcie lub przeprowadzić eksperyment, co do którego nie jesteś całkowicie pewien. Co byś zrobił bez Git?
Można skopiować projekt do nowego folderu i spróbować zmienić wszystko tam. Jeśli efekt Ci się spodoba, można skopiować go do głównego folderu. Jeśli nie — zapomnieć o nim lub po prostu usunąć.
Zajrzyjmy na przykład z życia, np. pisanie książki:
- Masz rękopis książki (główna gałąź).
- Decydujesz się spróbować zmienić zakończenie (tworzenie nowej gałęzi).
- Piszesz nowe zakończenie w osobnym dokumencie (praca w nowej gałęzi).
- Jeśli nowe zakończenie okaże się lepsze, zastąpisz stare w rękopisie (łączenie gałęzi).
- Usuwasz dokument z nowym zakończeniem (usunięcie gałęzi).
11.2 Tworzenie gałęzi
Tworzenie gałęzi w PyCharm jest bardzo proste.
Wpisz nazwę gałęzi.
PyCharm od razu wyświetli nazwę twojej bieżącej gałęzi na górze w menu:
Co było wcześniej?
Wcześniej wyświetlała się nazwa twojej pierwszej i głównej gałęzi — master.
Teraz wyświetla się test, co oznacza, że Git (pod przewodnictwem PyCharm) nie tylko stworzył nową gałąź, ale i od razu na nią się przełączył.
Dodajmy jakiś kod do pliku main.py bieżącej gałęzi (test) i zatwierdźmy go.
11.3 Przełączanie się między gałęziami
Krok 1. Wybierz gałąź.
Teraz przełączmy się na naszą starą gałąź. Kliknij w górnym menu i co tam widzimy?
Nie ma co się pogubić — to bardzo proste:
Local — to lista gałęzi twojego lokalnego repozytorium git; tutaj są dwie:
testmaster
Remote — to twoje zdalne repozytorium, które znajduje się na serwerze GitHub. Wysłaliśmy tam twoje zmiany, ale nowej gałęzi tam nie ma, co jest logiczne. Zdalne repozytorium nosi nazwę origin, i ma tylko gałąź master.
Recent — to lista nazw ostatnich gałęzi, z którymi pracowałeś. Ten punkt dodano w PyCharm dla wygody i szybkości.
Nazwa origin/master po prawej stronie od nazwy lokalnego repozytorium to nazwa zdalnego repozytorium, z którym teraz jest zsynchronizowane i do którego będą wysyłane zmiany.
Krok 2. — Przeładowujemy kod gałęzi do bieżącego folderu.
Krok 3. Sprawdzamy:.
U mnie wyświetla się gałąź (master) i stary kod.
11.4 Łączenie 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 — init.py i napiszmy w nim jakiś kod.
- Tworzymy plik init.py
- Piszemy w nim kod print("Cześć")
- Zatwierdzamy plik.
Oto jak wyglądają dwa moje pliki w gałęzi master:
Krok 2. Łączenie gałęzi.
Wlejemy do naszej bieżącej gałęzi (master) zmiany, które zostały dokonane w gałęzi test.
W tym celu również skorzystamy z górnego menu i polecenia «Merge ‘test’ into ‘master’».
Krok 3. Sprawdzamy wynik:.
Sprawdzamy:
- Na górze nadal wyświetlana jest gałąź
master - Mamy dwa pliki: init.py i main.py
- Plik main.py zawiera kod, który został dodany w gałęzi
test.
11.5 Konflikty podczas łączenia
Czasem podczas łączenia gałęzi pojawiają się konflikty.
Jeśli wprowadzisz zmiany w jednym pliku w różnych gałęziach i spróbujesz je połączyć, może pojawić się konflikt.
Konflikt plików tekstowych
Git to bardzo inteligentny system, rozpoznaje 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 we właściwe miejsce, jakby to zrobił człowiek.
Konflikt plików binarnych
Ale jeśli wprowadzisz zmiany w obrazku lub dokumencie, Git nie będzie próbował łączyć ich części w jeden plik, 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 może to wyglądać:
Co tu widzisz:
- Z lewej zawartość pliku main.py z gałęzi master
- Z prawej zawartość pliku main.py z gałęzi
test - W środku PyCharm proponuje ci napisać finalną wersję kodu (można kliknąć przyciski
«>>»i«<<», by automatycznie wkleić zmiany z jednego z plików).
Przyjąłem wersję master i dopisałem kod ręcznie. Oto co mi wyszło.
11.6 Historia zmian
Coś jeszcze przydatnego i ciekawego: możesz zobaczyć historię zmian dowolnego pliku, klikając przycisk Show History. Istnieją dwa miejsca, gdzie można ją znaleźć — znajdź je.
Tak wygląda historia zmian u mnie dla pliku main.py:
Wyjaśnienia:
- Z lewej widzisz historię zmian konkretnego pliku:
- Im nowsza zmiana, tym jest wyżej; im starsza — tym niżej.
- Tu również wyświetla się historia łączenia gałęzi.
- Z prawej — zmiany, które zostały wprowadzone w konkretnym commicie.
GO TO FULL VERSION