Wracamy po przerwie. Będzie kilka słów o schowku w GIT. Z całą pewnością większość z Was pierwsze słyszy o czymś takim. Mi samemu często umyka ta możliwość w systemie. Ale dla zasady warto z tej możliwości korzystać, by zachować porządek i być zadowolonym ze swojej staranności. Pasjonaci są tym zachwyceni.
Powiem szczerze, że zdarza się konieczność pilnych zmian w wydzielonej części repozytorium (praca na innej gałęzi, wyłączenie innej gałęzi, scalanie itd.). Wówczas pracując nad czymś zupełnie innym w trybie pilnym musimy przejść do innego zadania. Cóż robimy?
Wyjście, które najczęściej NIESTETY stosuję to „szybki commit” i praca nad nowym zleceniem. Biję się w pierś. O ile jest to wyjście proste, najszybciej podsuwane przez diabełka żerującego na tempie pracy, o tyle niekoniecznie najlepsze, a skoro nienajlepsze to znajdujemy element do optymalizacji pracy. Najczęściej nie komplikujemy sobie pracy przez „szybki commit”, ale nie zawsze warto „chwalić się” nieprzemyślamymi, nieukończonymi, nietrafionymi rozwiązaniami zastosowanymi w danym tasku, do którego końca (całości lub części) jeszcze zapewne trochę roboczogodzin przed programistą.
W tym momencie przychodzi do łask możliwość korzystania ze schowka w systemie kontroli wersji, jakim jest GIT.
Korzystanie ze schowka
git stash git stash list git stash show stash@{x} git stash apply git stash apply --index git stash apply stash@{x} --index git stash branch git stash drop stash@{x} git stash pop git stash clear
Komenda „stash” jak się pewnie domyślacie wrzuca zmiany do schowka, ale należy pamiętać, że nie dotyczy to plików w stanie „untracked”.
„List” znowuż jest intuicyjna i pozwala prześledzić nasze „stash-commity” w schowku. Posiadają one swoje numerki 0,1,2,..,x, gdzie 0 to ostatnio dodane zmiany do schowka.
Te numerki wykorzystujemy, gdy chcemy prześledzić jakich plików dotyczą konkretne zmiany („stash show stash@{x}”).
Nakładanie zmian ze schowka na obecny stan HEAD odbywa się przy pomocy „stash apply”. Nie podając parametru „–index” powodujemy, że zmiany nie znajdą się w przechowalni i konieczne jest jawne ich dodanie przez „git add …” lub „git commit -a …”. Oczywiście „apply” możemy zastosować do konkretnego „stash-commita”.
Wraz z upływem czasu zmiany w schowku mogą zacząć znacznie się różnić od aktualnego stanu HEAD. Wówczas nałożenie zmian ze schowka może przysporzyć nieco pracy nad rozwiązaniem konfliktów. W skrajnych przypadkach możemy chcieć zrezygnować ze zmian – co tak naprawdę nie jest problemowe, ale powoduje chaos w projekcie. Zakładając od razu możliwość dłuższej integracji schowka z aktualną wersją projektu możemy wykorzystać „stash branch”, czyli komendę, która stworzy nową gałąź, nałoży zmiany i usunie ze schowka. Teraz możemy na wydzielonej gałęzi pracować dalej (nakładać kolejne zmiany lub integrować z projektem).
Przed momentem poruszyliśmy kwestię usuwania nałożonych na projekt zmian ze schowka. Komenda „apply” pozostawia zmiany na liście – zawsze! Musimy jawnie zdecydować (przede wszystkim pamiętać o tym), czy i kiedy je usuniemy (pojedynczo „stash drop …” lub wszystkie „stash clear”).
Gdy często nas pamięć zawodzi warto pomyśleć o stosowaniu komendy „stash pop”. Nakładamy nią ostatnie zmiany ze schowka (pozycja x=0) i automatycznie usuwamy z listy zmian. Gwoli jasności – każde operacji usuwania zmian (konkretnych) z listy zmian wywołują reindeksację listy, przez to „{x}” zawsze rośnie o 1 – nie ma dziur na liście.
Pozdrawiam!