Jakub Piskorowski on 24/08/2023
Powrót do głównego folderu
// Lista lokalnych gałęzi
git branch
// Stworzenie nowej gałęzi i przełączenie się na nią
git checkout -b <nazwa-brancha>
// Przełączenie się na gałąź main
git checkout main
// Wypchnięcie zmian w wszystkich gałęziach
git push origin --all
// Historia commitów w danej gałęzi
git log
Branch to nic innego jak gałąź - czyli taka odnoga naszego projektu, utworzona w danym czasie. Coś takiego jak kopia - może żyć swoim życiem i w każdej chwili może być dołączona do głównej gałęzi.
W końcu miałeś już do czynienia w Gicie z jedną gałęzią - a tą gałęzią jest właśnie master czyli główna gałąź repozytorium.
Branch może zostać utworzony tak naprawdę na podstawie każdej z innych gałęzi, lecz zazwyczaj się to robi na podstawie głównej gałęzi – master.
Gałezię pozwalają w bardzo w prosty sposób pracować wielu osobom jednocześnie nad danym projektem. Przypuśćmy, że mamy duży projekt, szykuje się nowa wersja produktu - około 12 feature’ów, 5 programistów.
Dzięki branchom wszyscy programiści mogą pracować równolegle nie wchodząc sobie wcale w paradę - jak by to wyglądało?
Każdy programista na początek wziąłby jedno zadanie - jedna dodatkowa funkcjonalność i dla niej utworzyłem osobny branch odłączając się od gałęzi master. Po ukończeniu swojego zadania mógłby dołączyć swój branch do mastera i pracować nad kolejnym - łączenie gałęzi zostanie opisane w kolejnym temacie. Teraz skupmy się na branchach.
Sprawdzenie dostępnych gałęzi w repozytorium:
git branch
Utworzenie nowego brancha:
git branch <nazwa-brancha>
Przełączenie się na gałąź:
git checkout <nazwa-brancha>
Przełączenie się na gałąź i utworzenie jeśli jeszcze nie istniała:
git checkout -b <nazwa-brancha>
Przyda nam się jeszcze jedna - do sprawdzenia historii commitów danego brancha:
git log
Źródło: 1024kb.pl
Stwórzmy sobie nowe zdalne repozytorium, na którym sobie przetestujemy nowe polecenia.
Następnie należy sklonować do nas lokalnie nasze zdalne, nowe repozytorium.
git clone https://github.com/PiskorowskiJakub/Test-repo.git
Pierwszym naszym zadaniem jest stworzenie dwóch funkcji.
Na początku wylistujmy sobie dostępne branche:
git branch
I jak widać istnieje tylko main:
* main
Stwórzmy, więc nasz pierwszy branch - first-fun
:
git branch first-fun
I tym razem po wylistowaniu otrzymamy trochę dłuższą listę:
first-fun
* main
Widzisz, że gwiazdka jest tylko przy main - oznacza to, że aktualnie jesteśmy na gałęzi main!
Zmieńmy, więc branch na first-fun.
git checkout first-fun
I powinniśmy otrzymać:
Switched to branch 'first-fun'
Teraz możemy rozpocząc prace nad naszymi funkcjami. Oby dwie funkcje będą przyjmować dwa parametry wejściowe. Jedna funkcja będzie dodawała dwie wartości do siebie a druga odejmowała. Cały kod został napisany w głównym pliku index.php
.
function Add($x, $y){
return $x + $y;
}
function Subtract($x, $y){
return $x - $y;
}
Zakomitujmy zmiany:
git add *
git commit -m "Created function Add Substract"
Dodajmy teraz wyświetlenie wyniku działania naszych funkcji:
$a = 2;
$b = 2;
echo $a , " + " , $b , " = " , Add($a, $b);
echo "<br>";
echo $a , " - " , $b , " = " , Subtract($a, $b);
I ponownie zacommitujmy zmiany na naszej gałęzi:
git add *
git commit -m "Display result function"
I teraz możemy wyświetlić sobie całą historię zmian na naszej gałęzi:
Kolejnym naszym zadaniem jest stworzenie nowych funkcjonalności w nowych funkcjach.
W takim razie wracamy do gałęzi głównej, ponieważ od niej będziemy tworzyć nową gałąź.
git checkout main
Oraz tworzymy nową gałąź New-feature
. Tym razem użyliśmy komendy checkout z parametrem -b, aby utworzyć branch i automatycznie przejść do niego.
git checkout -b New-feature
I jak widać automatycznie zostaliśmy przeniesieni do nowego brancha:
Switched to a new branch 'New-feature'
I mam teraz takie branche:
* New-feature
first-fun
main
A nasza historia commitów wygląda aktualnie tak: (git log)
Dlaczego tak? Ponieważ utworzyliśmy gałąź od głównej gałęzi, gdzie był wykonany tylko init commit - zmiany na branchu first-fun w ogóle nas nie dotyczą, dopóki ich nie dołączymy do głównej gałęzi.
W takim razie stwórzmy sobie nowy plik (feature.php
), który będzie zawierał nasze nowe funkcje.
function Multiplication($x, $y){
return $x * $y;
}
function Division($x, $y){
return $x / $y;
}
Zacommitujmy oczywiście zmiany:
git add feature.php
git commit -m "New feature"
I teraz stwórzmy na nowo plik index.php
, w którym dołączymy nasz nowy plik i wyświetlimy wynik działania naszych nowych funkcji.
include 'feature.php';
$a = 4;
$b = 2;
echo $a , " * " , $b , " = " , Multiplication($a, $b);
echo "<br>";
echo $a , " / " , $b , " = " , Division($a, $b);
I oczywiście zacommitujmy naszą zmianę:
git add index.php
git commit -m "Display result"
I zróbmy teraz git log:
I jak widać nasze zmiany są widoczne na naszym branchu w historii commitów.
Na koniec wróćmy, więc do głównej gałęzi:
git checkout main
Oraz sprawdźmy ponownie historię maina:
git log
I otrzymamy:
I jak widać żadna zmiana na branchu nie wywołała zmian na mainie - czyli praca równoległa wielu programistów jest możliwa.
Jednak co teraz z tymi gałęziami?
Trzeba będzie je dołączyć do głównej gałęzi - jednak tym zajmiemy się już w następnym temacie!
Aby wypchnąć wszystkie swoje branche na zdalne repozytorium musisz użyć komendy:
git push origin --all
Dzięki temu zostaną wysłane wszystkie dostępne branche.