Praca z gałęziami GIT

Pracując nad danym repozytorium w GIT domyślnie pracujemy w głównej gałęzi main. Pracować nad projektem można jednak także w innych gałęziach, mając więcej wersji tego samego projektu. Nowe gałęzie tworzymy jeśli pracujemy nad zmianami w projekcie, ale nie chcemy „psuć” obecnie działającego, przymierzając się do wprowadzenia nowej funkcji, mając wielu programistów do jednego projektu itp.

Poleceniem git branch sprawdzamy w jakiej gałęzi obecnie jesteśmy. Jest to dobrą praktykę przy każdym siadaniu do kodu aby nie pisać zmian w złej gałęzi 🙂

Tworzymy nową gałąź poleceniem branch, a przenosimy się na nią poleceniem checkout:

Uwaga! Przenosząc się na nową gałąź powinniśmy mieć zapisaną naszą pracę w obecnej gałęzi robiąc commit lub poleceniem stash, które zapisuje naszą pracę bez tworzenia commita

Oczywiście końcowym etapem naszej pracy jest wdrożenie zmian z naszej gałęzi do głównej. Scalamy gałęzie poleceniem merge:

Aby zmienić gałąź na której pracujemy dodając commity z nowej gałęzi przechodzimy na tę gałąź i wskazujemy nową gałąź.

Może nam się pojawić konflikt. Konflikt powstaje najczęściej gdy zmieniony jest plik nietekstowy lub zmienione są linijki kodu, które występują w obu gałęziach. Git nie wie wtedy jaką wersję przyjąć. Konflikt można naprawić otwierając repo w innym programie np. VSCode i wybierając pożądną wersję.

Dobrą praktyką jest też jak najczęściej mergować zmiany z maina do naszej nowej gałęzi. Ew. konflikty będą wtedy szybko wykrywane.

Mergowanie przenosi nam pełną historię commitów innych gałęzi. Jeśli chcemy przenieść tylko wybrany commit lub więcej używamy polecenia git cherry-pick i hashe commitów np. git cherry-pick abdef fhfdfdf. Cherry-pick także tak jak merge jest wrażliwy na niezapisanie pracy i konflikty łączeń.

Jeżeli chodzi o dobre praktyki, pamiętajmy żeby zawsze pracować na jak najnowszej wersji. Czyli przed rozpoczęciem pracy pobieramy najnowszą wersję zdalnego repo poleceniem git pull.

Uwaga! Polecenia git pull i git push działają domyślnie tylko dla obecnej gałęzi. Aby zapisać lub pobrać zmiany całego repo trzeba po kolei przechodzić do każdej gałęzi (są polecenia które pozwalają na działanie na pełnym repo ale nie są zalecane).

Polecenie git stash pozwala nam na zapis pracy bez tworzenia commita. Możemy wybrać polecenie git stash i śmiało przejść do innej gałęzi, by potem powrócić i przywrócić zmiany poleceniem git stash pop. Co ciekawe, zmiany możemy pobrać także na innej gałęzi. Jeśli więc przypadkowo będziemy pracować na jednej gałęzi, to możemy te zmiany przenieść poleceniami git stash – git checkout docelowa_galaz – git stash pop