TeamQuest Blog

Często kommituj i nie panikuj

Często kommituj i nie panikuj

Marcin Sarna , 24.09.2021 r.

Kilka praktycznych porad do pracy z gitem.

Jesteś początkującym użytkownikiem gita albo dopiero chcesz się go nauczyć? Zajrzyj tutaj.

Wysyłaj commity możliwie często

Git bierze pełną odpowiedzialność za Twoje dane tylko wtedy, gdy się „zcommitujesz”. Jeśli nie będziesz pamiętał o wysłaniu commita a potem zrobisz z kodem coś źle przemyślanego, możesz wpaść w kłopoty. Posiadanie okresowych punktów kontrolnych daje programiście szansę na cofnięcie się w przeszłość i zrozumienie co zostało zepsute.

Ludzie to wiedzą a mimo to opierają się takiej praktyce bo jest to brzydkie, ogranicza funkcjonalność git-bisection, jest mylące dla obserwatorów a wręcz może prowadzić do oskarżeń o głupotę ze strony co mniej kulturalnych kolegów ;-) Cóż, jeśli po zakończeniu pracy nad projektem chcesz udawać wobec zewnętrznego świata, że Twój kod wypłynął z Twojego umysłu do repozytorium od razu całkowicie perfekcyjny, z każdą koncepcją w pełni przemyślaną i zaplanowaną, nie ma problemu. Git wspiera takie pudrowanie repozytorium – wystarczy zobaczyć potem pobawić się w rebase i git-bisect. Nie pozwól jednak, aby jutrzejsze piękno powstrzymało Cię od wysyłania dzisiejszych commitów, które mogą uratować Ci wiele godzin pracy.

Nie panikuj

Tak długo, jak długo commitowałeś swoją pracę (lub w wielu przypadkach przynajmniej dodałeś pliki za pomocą git add), twoja praca nie zostanie utracona przez co najmniej dwa tygodnie, chyba że naprawdę się postarasz (uruchamiając polecenia, które ręcznie ją usuwają).

Próbując znaleźć utracone commity, najpierw upewnij się, że nie stracisz żadnej bieżącej pracy. Powinieneś zatwierdzić swój obecny kod (ew. zrobić stash) przed podjęciem jakichkolwiek działań naprawczych, które mogą zniszczyć to nad czym aktualnie pracujesz i być może wykonać kopie zapasowe. Po znalezieniu commitów możesz wtedy bezstresowo wykonać reset, rebase, cherry-pick, merge lub w inny sposób zrobić to, co jest konieczne, aby uzyskać pożądaną historię commitów i drzewko pracy.

Git commit push

Istnieją trzy miejsca, w których „utracone” zmiany mogą się ukrywać. Mogą znajdować się w reflogu (git log -g), mogą znajdować się w zagubionych i znalezionych (git fsck –unreachable) lub mogły zostać ukryte (git stash list).

No i oczywiście prawa Murphy’ego uczą nas, że jest jeszcze taka możliwość iż Twoje commity wcale nie zostały utracone. Być może commit zostało wykonany na innej gałęzi niż na tej, o której myślałeś. Użyj git log -Sfoo --all i gitk --all --date-order aby spróbować znaleźć swoje zmiany w znanych gałęziach.

Wykonuj kopie zapasowe

Wszyscy zawsze zalecają tworzenie kopii zapasowych jako najlepszą praktykę, nic odkrywczego. Ale wiemy też, że gdy naprawdę potrzebujesz sięgnąć po backup, okazuje się że nie masz żadnego lub akurat wykonanego w tej dacie, na której Ci zależy. Na pewno pokrzepi Cię w takiej chwili myśl, że masz – wręcz wysoce nadmiarowy i rozproszony - system tworzenia kopii zapasowych ad-hoc! Dzieje się tak, ponieważ zasadniczo każdy clone jest kopią zapasową. W wielu przypadkach można użyć klona do eksperymentów z gitem, aby udoskonalić swoją metodę przed wypróbowaniem jej w rzeczywistości. Jest to najbardziej przydatne w przypadku poleceń git filter-branch i podobnych, w których dochodzi do trwałego zniszczenia historii bez możliwości odwrotu. Mimo to prawdopodobnie potrzebujesz również bardziej formalnego systemu kopii zapasowych.

Tradycyjne kopie zapasowe są nadal odpowiednią praktyką a klony i tak nie zapisują konfiguracji git, katalogu roboczego i indeksu czy niestandardowych odnośników. Korzystanie z tarball, cp, rsync, zip, rar czy podobnych narzędzi pozwala uzyskać idealną kopię zapasową. O ile bazowy system plików nie zmieni radykalnie kolejności operacji wejścia-wyjścia gita i nie ma dużego opóźnienia między skanowaniem katalogu a ich pobraniem, wynikowa kopia .git powinna być spójna w prawie wszystkich okolicznościach.

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej