Git #4: Rozgałęzienia

W tej odsłonie serii przestawię podstawowe komendy do pracy na zdalnym repozytorium. Używamy ich, żeby ułatwić pracę w zespole nad dowolnym projektem.


Rozgałęzienia (ang. branches) służą do zrównoleglania pracy. Pracując w zespole, dzięki branchom, każdy może wprowadzać zmiany, nawet w obrębie tego samym pliku, nie przeszkadzając sobie nawzajem. Można powiedzieć, że aż do momentu scalania gałęzi, pracujemy na własnej wersji repozytorium, we własnym małym świecie, na który nie wpływają inni użytkownicy. Nowe  rozgałęzienia można tworzyć z dowolnego punktu w projekcie i z dowolnej istniejącej już gałęzi.

Listowanie gałęzi

Aby pobrać informacje o gałęziach, na które możemy przejść wystarczy użyć komendy git branch. Branch, na którym aktualnie się znajdujemy, jest oznaczony gwiazdką. Jeżeli nie jesteś pewien czy posiadany lokalny git jest aktualny, użyj przed listowaniem gałęzi, komendy git fetch. Po stworzeniu repozytorium, główną gałęziom na której automatycznie się znajdujemy, jest master:

pi@raspberrypi:~/test_1 $ git branch
* master

Samo git branch daje nam, informuje tylko o lokalnych gałęziach. Opcje, które mogą być przydatne w przypadku tej komendy to:
-a – dostaniemy informacje o lokalnych i zdalnych branchach.
-r – informacje tylko o zdalnych gałęziach

Tworzenie nowej gałęzi

Aby stworzyć nową gałąź, znów użyjemy komendy git branch, jednak tym razem dodamy nazwę nowej gałęzi.

pi@raspberrypi:~/test_1 $ git branch new_branch
* master

Nowo stworzony branch jest klonem gałęzi, na której aktualnie się znajdowaliśmy. Jednak trzeba pamiętać, że nie zostaniemy automatycznie przeniesieni na nowy branch i że wszystkie aktualne zmiany są tworzone lokalnie:

pi@raspberrypi:~ $ cd test_1/
pi@raspberrypi:~/test_1 $ git fetch

Skakanie po gałęziach

Do przechodzenia między gałęziami służy komenda git checkout i nazwa gałęzi. Należy pamiętać, aby nie użyć samego git checkout bez nazwy, bo może się okazać, że stracimy wszystkie nie skomitowane zmiany.

pi@raspberrypi:~/test_1 $ git checkout new_branch
Switched to branch 'new_branch'

W celu sprawdzenia na jakiej gałęzi się znajdujemy, ponownie wykorzystamy komendę git branch:

pi@raspberrypi:~/test_1 $ git branch
  master
* new_branch

Dodawanie gałęzi do zdalnego repozytorium

Jak wspominałem wcześniej, dokonane zmiany w liście branchy, są zmianami lokalnymi. Do przesłania nowej gałęzi do zdalnego repozytorium użyjemy komendy git push –set-upstream origin new_branch. Argumentu –set-upstream używamy przy push’owaniu nowych repozytoriów, możemy go zastąpić również -u :

pi@raspberrypi:~/test_1 $ git push --set-upstream origin new_branch

Scalanie gałęzi

Zacznijmy od stworzenia i skomitowania nowego pliku w gałęzi new_branch, aby pokazać później móc sprawdzić poprawność scalania.

pi@raspberrypi:~/test_1 $ git touch new_file_for_new_branch.py
pi@raspberrypi:~/test_1 $ git add .
pi@raspberrypi:~/test_1 $ git commit -m "Added new file for new brunch"
pi@raspberrypi:~/test_1 $ git push

Scalenie gałęzi jest możliwe dzięki komendzie git merge. Aby je wykonać, najpierw musimy przejść na gałąź, do której chcemy wykonać scalanie. W tym przykładzie będzie to branch master. Przejdziemy na niego za pomocą komendy git checkout master. Następnie używając komendy git merge new_branch, zaciągniemy wszystkie zmiany z gałęzi new_branch na gałąź master. W najlepszym przypadku scalanie kończy się sukcesem, czasami jednak pojawiają się konflikty. Wtedy czeka nas trochę więcej pracy z ich rozwiązywaniem, ale o tym w kolejnych częściach serii.

pi@raspberrypi:~/test_1 $ git checkout master
Switched to branch 'master'
pi@raspberrypi:~/test_1 $ git merge new_branch
Updating 6c9de6d..b40bcc0
Fast-forward
 new_file_for_new_branch.py | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 new_file_for_new_branch.py
pi@raspberrypi:~/test_1 $

Aby zmiany były widocznie na zdalnym repozytorium należy użyć komendy git push.

pi@raspberrypi:~/test_1 $ git push

Usuwanie gałęzi

Jeżeli gałąź z jakiegoś powodu nie jest nam już potrzebna, na przykład została już scalona z inną gałęzią, lub po prostu nie potrzebujemy wprowadzonej w niej zmian, możemy usunąć istniejącą gałąź za pomocą komendy git branch z opcją -d i nazwą gałęzi, którą chcemy usunąć. A następnie git push z opcją –delete i informacjami o zdalnym repozytorium (nazwą serwera i gałęzi).

pi@raspberrypi:~/test_1 $ git branch -d new_branch
Deleted branch new_branch (was b40bcc0).
pi@raspberrypi:~/test_1 $ git push --delete origin new_branch
To https://github.com/QAbrio/test_1.git
 - [deleted]         new_branch
pi@raspberrypi:~/test_1 $

W tym artykule przeszliśmy prostą ścieżkę od stworzenia nowej gałęzi, poprzez jej scalenie z główną gałęzią, aż do jej usunięcia. Git jednak nie jest tak prostolinijny, daje nam możliwości do „skakania” po zmianach w przeszłości i zaciąganiu ich w do dowolnej gałęzi, daje to wiele możliwości, ale i sporo zagrożeń. Jak możemy to robić i jakie zagrożenia na nas czyhają dowiecie się już w następnej odsłonie tej serii.

close

Newsletter