Git – Branch part 2

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 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*