Jak zrobić porządek z branchami

Opublikowane przez Tomasz Prasołek w dniu

Wyświetlasz listę branchy i nie wiesz co się dzieje. Ponad 10 branchy na liście. Czytasz ich nazwy i nie przychodzi Ci do głowy żadne skojarzenie z czym to może być związane. Zastanawiasz się: “Czy to na pewno moje branche?” 🙂 Może ktoś mi je podrzucił 😛 Przechodzisz na nie, patrzysz na ostatnie commity i jak byk widać, że to Twoje. Sprzed 2 miesięcy i dotyczą zadania, które dawno jest już na produkcji.

Też masz takie sytuacje? W tym wpisie pokażę Ci jak zrobić porządek w branchach.

Branche lokalne i zdalne

Jednym z popularniejszych rodzajów pracy z branchami w systemie kontroli wersji GIT jest GitFlow lub jakaś jego odmiana. W skrócie chodzi o to, że wszystkie nowe rzeczy i poprawki błędów robimy na nowym branchach. Po skończonej pracy scalamy te branche z naszym głównym brachem deweloperskim. Czasami jest to develop, czasami master – zależy od ustaleń w zespole.

Jak już wspomniałem wyżej, jeśli robimy jakieś małego taska lub poprawiany drobny błąd, to przeważnie stworzymy sobie do tego nowego brancha. Po skończonej pracy – jeśli skończyliśmy go w mniej niż dzień roboczy – scalamy nasze zmiany do brancha deweloperskiego i usuwamy ten branch lokalny.

Jednak czasami dokończenie zadania musimy zostawić na następny dzień. Wtedy dobrym zwyczajem jest wypchnąć na serwer nasz branch, aby mieć kopię naszej pracy. Następnego dnia po skończonej pracy musimy oczywiście scalić naszą pracę z brachem głównym, a następnie usunąć zarówno branch lokalny, jak i zdalny.

Z czasem lista branchy może sie powiększyć jeśli nie będziemy ich regularnie usuwać.

Jak jednak sprawdzić, które branche już scaliliśmy z głównym?

git branch --merged

To polecenie wyświetli listę branchy już scalonych, czyli tych, które są do usunięcia.

Jeśli jesteśmy natomiast ciekawi, których branchy jeszcze nie scaliliśmy, to pokaże Nam je polecenie:

git branch --no-merged

Potencjalnie takie branche też mogą być do usunięcia wtedy jeśli wiemy, że to jakieś niepotrzebne branche na których np. tylko testowaliśmy jakieś rozwiązanie.

Usuwanie branchy

Usunięcie branchu, który został już scalony z głównym branchem:

git branch -d <nazwa_brancha>

Jeśli branch nie został scalony w konsoli pojawi się o tym informacja. Żeby skasować taki branch będzie trzeba użyć polecenia:

git branch -D <nazwa_brancha>

Co jest równoznaczne z:

git branch --delete --force <nazwa_brancha>

Usunięcie branchu zdalnego z serwera:

git push -d origin <nazwa_brancha>

Narzędzie git-curate

Do zrobienia porządku z branchami lokalnymi może pomóc narzędzie git curate. Po uruchomieniu wyświetla po kolei wszystkie lokalne branche wraz z informacjami:

  • Data ostatniego commita.
  • Treść commit message.
  • Informacja czy został on scalony do HEAD.
  • Informacja czy posiada branch zdalny.

Przy każdym branchu można podjąć decyzję co z tym branchem robimy. Jeśli wpiszemy:

  • y – oznaczamy branch do usunięcia.
  • n – oznaczamy branch, aby go nie usuwać.
  • done – usunie wszystkie branche wcześniej oznaczone do usunięcia i zamknie program.
  • abort – zamknie program bez żadnej akcji.
  • help – wyświetli pomoc.
Kliknij aby powiększyć

Jeśli robimy większe porządki w branchami to narzędzie git curate przyśpieszy ten proces.

Usunięcie referencji do branchy zdalnych

Zdarza się również tak, że pracujemy w kilka osób na jednym branchu. Czasami pobieramy czyjś branch, bo ta osoba ma w czymś problem i poprosiła Nas o pomoc.

Po skończeniu pracy kasujemy lokalne branche. A osoba, której pomogliśmy kasuje u siebie branch lokalny oraz ten na serwerze.

Czy znaczy, że już nie ma śladu po tym branchu? Nie do końca. Zostaje jeszcze u Nas referencja do brancha zdalnego. Będzie widać to po wpisaniu polecenia:

git branch -a

Nazwy branchy zdalnych będą poprzedzone przez “remotes/origin/”. Np.: branch zdalny dla brancha feature będzie miał nazwę:

remotes/origin/feature

Jak usunąć referencje do branchy zdalnych? Wystarczy wpisać polecenie:

git fetch --prune

To polecenie usuwa wszystkie referencje do branchy, które już nie istnieją na serwerze.

Takie referencje pozostają, bo Git nie jest narzędziem działającym typowo online. Jeśli ktoś skasuje na serwerze brancha, który my kiedyś pobraliśmy, to on automatycznie nie zostanie skasowany u Nas. Dlatego raz na jakiś czas dobrze jest wywołać powyższe polecenie.

Podsumowanie

Pamiętaj, aby po skończonej pracy usunąć od razu branch lokalny i zdalny (jeśli jest). Wystarczą do tego 2 polecenia:

Usunięcie brancha lokalnego

git branch -d <nazwa_brancha>
git branch -D <nazwa_brancha> # wymuszenie skasowania brancha

Usunięcie brancha zdalnego

git push -d origin <nazwa_brancha>

A do usunięcia referencji do już nieistniejących branchy jest polecenie:

git fetch --prune

Mam nadzieję, że ty masz porządek w swoich branchach 🙂 Jeśli nie, to liczę na to, że od teraz zaczniesz dbać o niego.

Źródła:
https://www.atlassian.com/git/tutorials/git-prune?utm_source=newsletter&utm_medium=email&utm_campaign=bitbucket_git-insiders-oct2018&jobid=103719722&subid=1407530136
https://www.kevinkuszyk.com/2016/08/17/git-tips-5-prune-branches-to-keep-your-repro-in-good-shape/
https://git-scm.com/docs/git-branch

Photo by Oliver Hale on Unsplash


1 Komentarz

Dominik · 1 lipca 2019 o 17 h 08 min

O git-curate wcześniej nie słyszałem a wygląda naprawdę fajnie. Dzięki za ten wpis 🙂

Dodaj komentarz

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