Zdecydowana większość doświadczonych programistów i zespołów zgodzi się co do jednej odpowiedzi: lepiej mieć więcej mniejszych, logicznie powiązanych commitów.
W świecie inżynierii oprogramowania to podejście nazywa się Atomic Commits (Commity Atomowe).
Oto szczegółowe wyjaśnienie, dlaczego to podejście jest lepsze i jak je stosować w praktyce.
1. Złota zasada: Atomic Commits
Commit powinien być "atomowy", co oznacza, że jest to najmniejsza możliwa jednostka zmiany, która ma sens biznesowy lub techniczny i nie psuje działania aplikacji.
-
Jeden commit = Jedno zadanie logiczne.
-
Jeśli naprawiasz błąd w logowaniu i jednocześnie poprawiasz literówkę w stopce strony – to powinny być dwa osobne commity.
-
Jeśli dodajesz nową funkcjonalność, która wymaga zmian w pliku HTML, CSS i JavaScript – to powinien być jeden commit (ponieważ te zmiany są ze sobą nierozerwalnie związane).
2. Dlaczego małe commity są lepsze?
Podejście "wielka paczka zmian" (tzw. Mega-Commit) jest ryzykowne i utrudnia pracę zespołową. Oto dlaczego małe zmiany wygrywają:
-
Łatwiejsze Code Review: Koledzy z zespołu szybciej sprawdzą 5 commitów po 20 linii kodu, które mają jasne opisy, niż jeden commit z 1000 linii, w którym miesza się refaktoryzacja, naprawa błędu i nowa funkcja.
-
Bezpieczne wycofywanie zmian (git revert): Jeśli wdrożysz 3 zmiany w jednym commicie i jedna z nich okaże się błędna, musisz wycofać całość (również te dwie dobre zmiany). Przy atomowych commitach wycofujesz tylko tę jedną, wadliwą część.
-
Łatwiejsze debugowanie (git bisect): Git posiada narzędzie bisect, które pozwala automatycznie znaleźć commit, który wprowadził błąd. Jeśli commit jest mały, od razu wiesz, gdzie leży przyczyna. Jeśli commit jest ogromny, wiesz tylko, że błąd jest "gdzieś w tych 50 plikach".
-
Przenoszenie zmian (git cherry-pick): Czasami trzeba przenieść konkretną poprawkę na inną gałąź (np. z wersji developerskiej do produkcyjnej jako hotfix). Jeśli poprawka jest "sklejona" z innymi zmianami w dużym commicie, jest to bardzo trudne.
3. Pułapka: Czy "mały" oznacza "zepsuty"?
Nie. To ważne rozróżnienie.
Commitowanie "co 5 minut" tylko po to, by zapisać pracę (gdy kod się nie kompiluje lub testy nie przechodzą), jest złym pomysłem w kontekście publicznej historii (tego, co widzi zespół).
Zasada: Każdy commit na głównej gałęzi (master/main/develop) powinien zostawiać aplikację w stanie działającym.
4. Jak pracować, żeby nie zwariować? (Workflow)
Programiści często boją się małych commitów, bo nie chcą "śmiecić" w historii podczas pracy. Oto rozwiązanie:
-
Lokalnie: Rób commity tak często, jak chcesz (nawet "work in progress", "save point"). To Twoja brudna robota.
-
Przed wysłaniem (Push): Użyj Squash (zgnatania commitów).
Przykład:
Robisz zadanie "Dodanie formularza kontaktowego".
...