Jaka jest różnica między git stash a git commit?

Git to jedno z najpopularniejszych narzędzi do kontroli wersji, które jest szeroko stosowane w zespołach programistycznych na całym świecie. Wśród licznych funkcji Gita, dwie z nich często powodują zamieszanie wśród początkujących programistów: git stash i git commit. W tym artykule szczegółowo omówimy różnice między tymi poleceniami, ich zastosowanie oraz przypadki, w których jedno może być lepszym wyborem od drugiego.

Podstawowe pojęcia: git stash i git commit

Aby w pełni zrozumieć różnicę między git stash a git commit, najpierw wyjaśnijmy, czym są te komendy i do czego służą.

Co to jest git stash?

Polecenie git stash pozwala tymczasowo zapisać zmiany w bieżącym stanie roboczym bez ich zatwierdzania (commitowania). Jest to przydatne w sytuacjach, gdy musisz przerwać pracę nad jednym zadaniem, ale chcesz wrócić do niego później bez utraty postępu.

W wyniku użycia git stash zmiany są przechowywane w specjalnej “półce” (stash), a katalog roboczy zostaje przywrócony do stanu czystego. Przykład użycia:

git stash

Aby przywrócić zmiany zapisane w stashu, używamy polecenia:

git stash pop

Co to jest git commit?

Z kolei git commit służy do trwałego zapisania zmian w lokalnym repozytorium. Zatwierdzenie zmian za pomocą git commit oznacza, że są one gotowe do dzielenia się z innymi członkami zespołu (po wypchnięciu ich do zdalnego repozytorium).

Podstawowy przykład użycia:

git commit -m "Opis zmian"

Polecenie to tworzy migawkę bieżącego stanu kodu, co pozwala łatwo wrócić do niego w przyszłości.

Kluczowe różnice między git stash a git commit

Choć git stash i git commit mogą wydawać się podobne, ich zastosowanie i cel są zupełnie inne. Oto główne różnice:

  • Czasowość vs. trwałość:

    git stash zapisuje zmiany tymczasowo, bez zapisywania ich jako części historii projektu. git commit natomiast trwałe zapisuje zmiany w historii repozytorium.

  • Historia repozytorium:

    Zmiany zapisane przez git stash nie pojawią się w historii commitów. Natomiast git commit tworzy nowy punkt w historii.

  • Udostępnianie zmian:

    Zmiany zapisane przy użyciu git stash nie mogą być udostępniane innym użytkownikom, chyba że zostaną przywrócone i zatwierdzone. Zmiany zatwierdzone za pomocą git commit mogą być wypchnięte do zdalnego repozytorium.

  • Stan roboczy:

    git stash czyści katalog roboczy, przywracając go do stanu czystego. git commit pozostawia katalog roboczy w obecnym stanie (chyba że użyto opcji --amend).

Przykłady zastosowania

Rzućmy okiem na konkretne sytuacje, w których lepiej jest użyć jednego z tych poleceń.

Kiedy używać git stash?

git stash jest idealny w następujących scenariuszach:

  • Musisz szybko przełączyć się na inną gałąź bez zatwierdzania nieukończonych zmian.
  • Chcesz odrzucić zmiany, ale zachować je na wszelki wypadek.
  • Pracujesz nad wieloma zadaniami równocześnie i potrzebujesz “odłożyć na bok” część pracy.

Kiedy używać git commit?

Używaj git commit w przypadkach, gdy:

  • Zmiany są gotowe do zapisania w historii projektu.
  • Chcesz udostępnić zmiany innym członkom zespołu.
  • Wprowadzone zmiany są spójne i opisują zakończony etap pracy.

Najczęstsze błędy i jak ich unikać

Podczas korzystania z git stash i git commit możesz natknąć się na pewne problemy. Oto najczęstsze z nich i jak sobie z nimi radzić:

Problem z odnalezieniem zmian zapisanych w stashu

Jeśli zapomniałeś, co zostało zapisane w stashu, możesz użyć:

git stash list

Polecenie to wyświetli listę wszystkich zapisanych zmian.

Zatwierdzenie niekompletnych zmian

Przed użyciem git commit upewnij się, że wszystkie istotne zmiany zostały dodane do indeksu za pomocą:

git add .

Przypadkowe nadpisanie zmian

Przywracając zmiany ze stasha, możesz przypadkowo nadpisać bieżące zmiany. Aby tego uniknąć, najpierw upewnij się, że katalog roboczy jest czysty.

Podsumowanie

Podsumowując, git stash i git commit mają różne zastosowania i są przeznaczone do różnych scenariuszy. git stash jest doskonałym narzędziem do tymczasowego przechowywania zmian, gdy potrzebujesz przerwy w pracy. Z kolei git commit pozwala na trwałe zapisanie zmian w historii projektu i dzielenie się nimi z zespołem.

Znając różnice między tymi dwoma poleceniami, możesz efektywnie zarządzać swoimi zmianami w Git, unikając typowych błędów i zachowując porządek w swoim repozytorium.