Commit

Zatwierdzenie zestawu zmian w repozytorium Git wraz z opisem. Tworzy punkt w historii projektu, do którego można wrócić.

Commit to zatwierdzony zestaw zmian w repozytorium Git wraz z opisem, który tłumaczy, co i po co zmieniłeś. Każdy commit tworzy nowy, trwały punkt w historii projektu — taki zapis stanu plików, do którego możesz wrócić, porównać go z innym albo cofnąć. W praktyce to atom pracy w systemie kontroli wersji: zamiast trzymać dziesięć folderów projekt_final_v2_naprawde_ostatni, masz jedną oś czasu z konkretnymi krokami.

Pod spodem commit jest obiektem identyfikowanym przez hash SH-1 (lub SHA-256 w nowszych repo) — długi ciąg znaków typu a3f9c2e. Zawiera migawkę drzewa plików, wskaźnik na commit-rodzica (dzięki temu powstaje łańcuch historii), dane autora, datę oraz wiadomość. Ważne: dopóki nie zrobisz commita, Git nie „pamięta” twoich zmian na stałe. Zapis odbywa się dwuetapowo — najpierw wrzucasz zmiany do tzw. staging area przez git add, a dopiero potem je utrwalasz.

Jak to wygląda w praktyce

Typowy scenariusz: poprawiłeś logowanie, sprawdzasz git status, dodajesz pliki i zatwierdzasz:

  • git add auth.js — wrzucasz konkretny plik do staging
  • git commit -m "Fix: walidacja pustego hasła przy logowaniu" — tworzysz commit z opisem

Od teraz ta zmiana ma swój hash i widać ją w git log. Jeśli coś spsujesz później, wrócisz do tego punktu albo cofniesz go przez git revert. W zespole te opisy czyta się codziennie przy code review i przy szukaniu, kiedy wkradł się bug (git bisect).

Częste błędy i mity

Mit numer jeden: „commit wysyła kod na GitHuba”. Nie wysyła. Commit jest lokalny — dopiero git push przerzuca go na zdalne repozytorium. Drugi grzech to wiadomości w stylu "fix", "zmiany" albo "asdf" — za pół roku nikt (łącznie z tobą) nie będzie wiedział, o co chodziło. Pisz krótko i konkretnie, w trybie rozkazującym („Dodaj”, „Napraw”). Trzeci błąd: gigantyczne commity zbierające 40 plików z trzech różnych funkcjonalności. Rób małe, logiczne porcje — łatwiej je przeglądać i cofać. I nie commituj haseł ani plików .env; do tego służy .gitignore.

Pojęcia powiązane: repozytorium, branch, merge, pull request, staging area, push, git revert, HEAD.