Wybierz region
pl
  • PL
  • EN
Wydrukuj

Git stash: między normalną pracą a awarią

Kontrola wersji jest nieodłączną częścią codziennego życia programistów. Trudno sobie wyobrazić jakikolwiek zespół pracujący nad oprogramowaniem bez użycia narzędzia do niej. Równie trudno wyobrazić sobie programistę, który nie pracował lub przynajmniej nie słyszał o Git.

Pierwszą rzeczą do zrozumienia jest to, dlaczego przechowywanie zmian w Git jest ważne. Załóżmy na chwilę, że Git nie ma polecenia do przechowywania zmian oraz pracujesz nad repozytorium z dwoma gałęziami, A i B. Gałęzie A i B od dłuższego czasu rozchodzą się od siebie i mają różne HEAD. Podczas pracy nad niektórymi plikami w gałęzi A, Twój zespół prosi Cię o naprawienie błędu w gałęzi B. Szybko zapisujesz zmiany w gałęzi A i próbujesz przełączyć się na gałąź B za pomocą git checkout B. Git natychmiast przerywa operację i zgłasza błąd, „Your local changes to the following files would be overwritten by checkout … Please commit your changes or stash them before you switch branches.”.

Jest kilka sposobów, które mogą nam pomóc w takiej sytuacji:

Pierwszy to stworzenie commita na gałęzi A i wypchnięcie naszych zmian. Następnie naprawić zlecony błąd na gałęzi B, powrócić do gałęzi A i wywołać polecenie git reset HEAD^  by odzyskać nasze zmiany. Drugim sposobem jest zapisanie zmian w zwykłym edytorze tekstu.

Drugi sposób jest bardzo złym pomysłem, a pierwsza metoda choć wydaje się dobra to jest mniej elastyczna. Niedokończone zmiany są traktowane jako punkt kontrolny, a nie łatka nad którą nadal pracujemy. Opisana wyżej sytuacja jest tym scenariuszem dla którego stworzono polecenie git stash:

Komenda git stash ukrywa zmiany, zapewniając czysty katalog roboczy i możliwość przełączenia się do nowej gałęzi w celu dokonania poprawki, bez konieczności wykonywania bezsensownej migawki w celu zapisania bieżącego stanu.

Jeżeli sami chcemy nadać tytuł naszej zmianie wystarczy użyć polecenia git stash push -m ‘message’ wtedy dokładnie wiemy który stash czego dotyczy. Co bardzo istotne, jeżeli chcemy zapisać również nieśledzone przez git’a pliki to należy dodać

flagę -u

Gdy skończymy pracę nad poprawką i chcemy wrócić do poprzednich zmian, możemy uruchomić:

Jeżeli mamy więcej zmian, które zapisaliśmy w stash’u to możemy je podejrzeć za pomocą polecenia git stash list:

W takiej sytuacji gdy w stash’u mamy zapisaną większą ilość zmian to polecenie git stash pop przywróci do obszaru roboczego ostatnio zapisane zmiany. Jeżeli chcemy przywrócić inną pozycję musimy użyć polecenia z dodaniem nazwy i numeru:

Kolejnym aspektem przy używaniu tego polecenia jest to, czy gdy przywracamy zmiany do obszaru roboczego, to chcemy mieć je również w stash’u czy nie. Polecenie git stash pop przywraca zmiany, ale jednocześnie usuwa je ze stash’a. Jeżeli chcemy je zatrzymać musimy użyć polecenia git stash apply.

Teraz jeżeli [email protected]{1} wyciągaliśmy do obszaru roboczego i jednocześnie zostawiliśmy zapianego w schowku, to w którymś momencie możemy stwierdzić, że nie potrzebujemy go dłużej. Aby usunąć jakąś pozycję ze schowka należy użyć polecenia git stash drop.

Ważnym aspektem zapisywania rzeczy w stash’u jest to, że jeżeli zmiany są na tyle duże i istotne, to powinniśmy pracować na nich na nowej gałęzi.

Git stash to bardzo wygodne polecenie Gita. Stosowane we właściwych sytuacjach może przynieść wiele korzyści. Jeżeli często przełączasz się między gałęziami i potrzebujesz bezpiecznie zachować swoją bieżącą pracę na krótki czas to ta komenda jest dla Ciebie. Jeżeli będziesz postępował zgodnie z dobrymi praktykami, to poprawi Twoją wydajność.

 

 


Agnieszka Piętka

Full Stack Developer z Asseco Gliwice. Swoją edukację zaczynała od bioinformatyki, a teraz tworzy rozwiązania informatyczne dla sektora medycznego. Swój wolny czas spędza na podróżach tych małych i dużych, po których tworzy filmiki i dzieli się nimi z innymi. Czas z przyjaciółmi spędza głównie grając w planszówki.


Wydrukuj