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:
$ 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.
$ 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.
$ 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
$ 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.
$ 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
/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?
$ 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
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:
$ 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 🙂