Poprzednio dowiedzieliśmy się, czym są gałęzie. Teraz pokaże, jak usunąć istniejącą gałąź oraz jak zmienić nazwę gałęzi. Zapraszam 🙂
Szybki wstęp
Na potrzeby tego wpisu utwórzmy sobie repozytorium potrzebne do zrozumienia zagadnienia.
- Utwórzmy pięć rewizji
- Utwórzmy branch na trzeciej rewizji i nadajmy mu nazwę test1
- Utwórzmy branch o nazwie test2 na tej samej rewizji co master
- Przejdźmy na nowy branch test2
- Dodajmy rewizje na branch test2
Przykład:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ git commit -m "commit 1" --allow-empty $ git commit -m "commit 2" --allow-empty ... $ git commit -m "commit 5" --allow-empty $ git log --oneline d4dbe73 commit 5 cb4f6d0 commit 4 882c698 commit 3 3401f06 commit 2 7a22adf commit 1 $ git branch test1 882c698 $ git branch test2 $ git checkout test2 $ git commit -m "commit 6" --allow-empty $ git log --oneline --graph --all * 101262e (test2) commit 6 | * d4dbe73 (HEAD -> master) commit 5 | * cb4f6d0 commit 4 |/ * 882c698 (test1) commit 3 * 3401f06 commit 2 * 7a22adf commit 1 |
Tak to wygląda na obrazku:
Usuwanie gałęzi
Do usuwania gałęzi git udostępnia nam dwa polecenia.
- git branch -d nazwa-galezi
- git branch -D nazwa-galezi
git branch -d nazwa-galezi
Polecenie git branch -d nazwa-galezi usunie gałąź pod warunkiem, że nie znajdujemy się na tej gałęzi oraz jest ona zawarta w gałęzi bieżącej. W naszym przypadku jest to gałąź test1. Jest ona zawarta w gałęzi master, inaczej mówiąc, gałąź master posiada te same rewizje, co gałąź test1, dlatego są one zawarte, spójne. Wydanie polecenia git branch -d nazwa-galezi w tym przypadku przebiegnie pomyślnie.
1 2 3 4 5 6 7 |
$ git branch * master test1 test2 $ git branch -d test1 Deleted branch test1 (was 882c698). |
git branch -D nazwa-galezi
Natomiast polecenie git branch -D nazwa-galezi usunie gałąź pod warunkiem, że nie znajdujemy się na tej gałęzi oraz jest ona poza gałęzią bieżącą i ma rewizje inne niż gałąź bieżąca. W naszym przypadku jest to gałąź test2. Jest ona niezawarta w gałęzi master, inaczej mówiąc, gałąź master różni się rewizjami między gałęzią test2, dlatego są one niezwarte, niespójne. Wydanie polecenia git branch -d nazwa-galezi w tym przypadku wywoła błąd.
1 2 3 4 5 6 7 |
$ git branch * master test2 $ git branch -d test2 error: The branch 'test2' is not fully merged. If you are sure you want to delete it, run 'git branch -D test2'. |
Git dba o nas i chcę się upewnić, że mimo różnic między gałęziami, chcemy świadomie usunąć gałąź z danymi, które nie zawierają się w gałęzi bieżącej, czyli master. Inaczej mówiąc, git pyta nas, czy jesteśmy pewni tego, że usuniemy gałąź z danymi, które nie znajdują się w gałęzi bieżącej(master).
Aby 'pokazać’ gitowi, że świadomie chcemy usunąć gałąź i znamy tego konsekwencje, wydajemy polecenie: git branch -D test2
1 2 3 4 5 6 |
$ git branch * master test2 $ git branch -D test2 Deleted branch test2 (was 101262e). |
Zmiana nazwy gałęzi
- git branch -m staraNazwa nowaNazwa
- git branch -M staraNazwa nowaNazwa
Aby zmienić nazwę gałęzi, należy wydać polecenie git branch -m staraNazwa nowaNazwa. Posłużmy się repo z początku posta.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ git log --oneline --graph --all * 101262e (test2) commit 6 | * d4dbe73 (HEAD -> master) commit 5 | * cb4f6d0 commit 4 |/ * 882c698 (test1) commit 3 * 3401f06 commit 2 * 7a22adf commit 1 $ git branch * master test1 test2 |
Tak wygląda nasze repo a teraz zmienimy nazwę gałęzi test1 na NewBranch01
1 2 3 4 5 6 7 |
/c/git (master) $ git branch -m test1 NewBranch01 $ git branch * master NewBranch01 test2 |
A co jeżeli, chcemy zmienić nazwę gałęzi, na nazwę, która już istnieje?
1 2 3 4 5 6 7 |
$ git branch * master NewBranch01 test2 $ git branch -m test2 NewBranch01 fatal: A branch named 'NewBranch01' already exists. |
Git informuje nas, że istnieje już taka nazwa gałęzi. Jeżeli, coś nas podkusi, aby jednak zmienić nazwę gałęzi na już istniejącą nazwę, możemy to zrobić za pomocą polecenia:
git branch -M staraNazwa nowaNazwa. Polecenie spowoduje usunięcie gałęzi nowaNazwa oraz zmianę nazwy staraNazwa na nowaNazwa. Przykład
1 2 3 4 5 6 7 8 9 10 11 12 13 |
c/git (master) $ git log --oneline 9f5a99b (HEAD -> master) A c/git (NewBranch01) $ git log --oneline 1015c78 (HEAD -> NewBranch01) B 9f5a99b (master) A c/git (test2) $ git log --oneline 97194de (HEAD -> test2) C 9f5a99b (master) A |
Wykonajmy polecenie: git branch -M test2 NewBranch01 jak myślisz? Jaki będzie wynik?
Ta-daaaaam:
1 2 3 |
$ git log --oneline --all 97194de (NewBranch01) C 9f5a99b (HEAD -> master) A |
Stara nazwa gałęzi czyli NewBranch01 z rewizją B została usunięta. Gałąź test2 została przekształcona w gałąź o nazwie NewBranch01 z rewizją C
Podsumowanie
Jak widać usuwanie gałęzi oraz zmienianie nazwy gałęzi jest proste, mało tego git troszczy się o naszą pracę, stosując odpowiednie komunikaty, żebyśmy nie narobili sobie szkody. Podstawy przygody z gałęziami mamy już za sobą. Teraz przyjdzie czas na wcześniej wspomniane słowo merge, ale o tym już w następnym wpisie 🙂
Pozdro 🙂