git commit
Polecenie git commit
tworzy migawkę zmian w projekcie, które obecnie znajdują się w przechowalni. Zatwierdzone migawki można traktować jako „bezpieczne” wersje projektu — system Git nigdy sam ich nie zmieni, chyba że zostanie wydane jawne polecenie. Przed wykonaniem polecenia git commit
należy użyć polecenia git add, aby przenieść do przechowalni lub wypromować zmiany w projekcie, które będą przechowywane w commicie. Polecenia git commit
i git add
należą do najczęściej stosowanych.
Git commit a SVN commit
Oprócz podobieństwa w nazwie git commit
w niczym nie przypomina svn commit
. Zbieżność terminologiczna może być źródłem nieporozumień dla nowicjuszy Git mających doświadczenie z systemem SVN, dlatego warto podkreślić, czym się one różnią. Różnice między zatwierdzeniami git commit
oraz svn commit
wynikają z rozbieżności między scentralizowanym (SVN) a rozproszonym modelem aplikacji (Git). W przypadku SVN commit wypycha zmiany z lokalnego klienta SVN do zdalnego, scentralizowanego, współdzielonego repozytorium SVN. W przypadku Git repozytoria są rozproszone, a migawki są zatwierdzane w lokalnym repozytorium, co wyklucza konieczność interakcji z innymi repozytoriami Git. Commity Git można później wypchnąć do dowolnych repozytoriów zdalnych.
Jak to działa
Na wysokim poziomie system Git można potraktować jako narzędzie do zarządzania osią czasu. Commity to podstawowe elementy składowe osi czasu projektu Git. Można je postrzegać jako migawki lub kamienie milowe na osi czasu projektu Git. Commity tworzy się za pomocą polecenia git commit
w celu uchwycenia stanu projektu w danym momencie. Migawki Git zawsze są commitowane do lokalnego repozytorium. Różni się to zasadniczo od SVN, gdzie kopia robocza jest trafia do centralnego repozytorium. Git nie wymusza interakcji z centralnym repozytorium, dopóki nie jest to konieczne. Podobnie jak przechowalnia jest buforem między katalogiem roboczym a historią projektu lokalne repozytorium każdego dewelopera stanowi bufor między jego kontrybucjami a centralnym repozytorium.
Dla nowych użytkowników Git oznacza to gruntowną zmianę modelu programowania. Zamiast wprowadzać zmiany i zatwierdzać je bezpośrednio w centralnym repozytorium programiści Git mają możliwość gromadzenia commitów w repozytorium lokalnym. Zapewnia to wiele zalet w stosunku do współpracy w modelu SVN: ułatwia rozdzielenie funkcji na pomniejsze commity oraz zgrupowanie powiązanych commitów i wyczyszczenie lokalnej historii przed publikacją w repozytorium centralnym. Pozwala to także programistom pracować w odizolowanym środowisku i odłożyć integrację aż do momentu, gdy scalenie z innymi użytkownikami będzie całkowicie wykonalne. Choć izolacja i odroczona integracja są korzystne w wymiarze indywidualnym, w najlepszym interesie zespołu leży częsta integracja małych jednostek organizacyjnych. Aby uzyskać więcej informacji na temat najlepszych praktyk w zakresie współpracy zespołowej Git, przeczytaj, jak zespoły kształtują przepływy pracy Git.
materiały pokrewne
Gałąź Git
POZNAJ ROZWIĄZANIE
Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud
Migawki, nie różnice
Poza rozbieżnościami natury praktycznej implementacje modeli SVN i Git oparto na całkowicie odmiennych filozofiach projektowania. SVN śledzi różnice w plikach, natomiast model kontroli wersji Git bazuje na migawkach. Commit SVN składa się z samych różnic między bieżącym stanem a oryginalnym plikiem dodanym do repozytorium. Git natomiast rejestruje całą zawartość każdego pliku w każdym commicie.
Wiele operacji Git przebiega zatem znacznie szybciej niż w przypadku SVN, gdzie wersja pliku musi zostać „zmontowana” z poszczególnych wcześniejszych wersji. Wewnętrzna baza danych Git oferuje natychmiastowy dostęp do pełnej wersji każdego pliku.
Model migawkowy Git istotnie wpływa na niemal każdy aspekt modelu kontroli wersji: od narzędzi do rozgałęziania i łączenia po przepływy pracy oparte na współpracy.
Często używane opcje
git commit
Zatwierdź migawkę w przechowalni. Spowoduje to wywołanie edytora tekstu z monitem o wprowadzenie komunikatu zatwierdzenia. Po jego wprowadzeniu zapisz plik i zamknij edytor, aby utworzyć commit.
git commit -a
Zatwierdź migawkę wszystkich dokonanych zmian w katalogu roboczym. Dotyczy to wyłącznie edycji w śledzonych plikach (dodanych w którymś momencie za pomocą git add
).
git commit -m "commit message"
Polecenie, które natychmiast tworzy commit ze wskazanym komunikatem zatwierdzenia. Domyślnie git commit
wywołuje lokalnie skonfigurowany edytor tekstu oraz monit o wprowadzenie komunikatu zatwierdzenia. Przekazanie opcji -m
powoduje pominięcie edytora i wyświetlanie komunikatu w wierszu.
git commit -am "commit message"
Polecenie dla zaawansowanych użytkowników, które łączy opcje -a
oraz -m
. Ta kombinacja natychmiast tworzy commit wszystkich zmian w przechowalni z zastosowaniem wskazanego komunikatu zatwierdzenia.
git commit --amend
Ta opcja dodaje kolejny poziom funkcjonalności do polecenia commit. Jej użycie skutkuje edycją ostatniego commitu. Nie jest tworzony nowy commit; zamiast tego zmiany w przechowalni zostają dodane do poprzedniego. Polecenie wywołuje skonfigurowany edytor tekstu oraz monit o zmianę wcześniej określonego komunikatu zatwierdzenia.
Przykłady
Zapisywanie zmian wraz z commitem
W poniższym przykładzie założono, że edytowano część zawartości pliku o nazwie hello.py
w bieżącej gałęzi i że może już ona zostać zatwierdzona w historii projektu. Najpierw przenieś plik do przechowalni za pomocą polecenia git add
, a następnie zatwierdź z przechowalni.
git add hello.py
To polecenie doda plik hello.py
do przechowalni Git. Efekt działania możemy sprawdzić za pomocą polecenia git status
.
git status
On branch main
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: hello.py
Oznaczenie na zielono nowego pliku wyjściowego hello.py
wskazuje, że plik hello.py
zostanie zapisany wraz z następnym commitem. Commit tworzy się za pomocą polecenia:
git commit
Powoduje to wywołanie edytora tekstu (konfigurowalnego za pomocą git config
) oraz monitu o wprowadzenie komunikatu dziennika commitów wraz z listą tego, co jest zatwierdzane:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch main
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
#modified: hello.py
System Git nie wymaga, aby komunikaty zatwierdzeń były zgodne z konkretnymi normami formatowania, lecz powszechnie przyjętym rozwiązaniem jest podsumowanie całego commitu w pierwszym wierszu przy użyciu maksymalnie 50 znaków, pozostawienie pustej linii, a następnie szczegółowe wyjaśnienie wprowadzonych zmian. Przykład:
Change the message displayed by hello.py
- Update the sayHello() function to output the user's name
- Change the sayGoodbye() function to a friendlier message
Powszechną praktyką jest użycie pierwszego wiersza komunikatu zatwierdzenia jako wiersza tematu podobnie jak w wiadomości e-mail. Resztę komunikatu dziennika uznaje się za treść i służy ona do przekazywania szczegółów zmian w ramach commita. Wielu programistów lubi używać czasu teraźniejszego w komunikatach zatwierdzeń. To sprawia, że wyglądają bardziej jak czynności w ramach repozytorium, co sprzyja intuicyjności procedury.
Jak zaktualizować (amend) commit
Wykorzystajmy powyższy przykład z plikiem hello.py
. Przeprowadźmy dalsze aktualizacje w pliku hello.py
i wykonajmy następujące czynności:
git add hello.py
git commit --amend
Powoduje to ponowne wywołanie skonfigurowanego edytora tekstu. Tym razem zostanie on jednak wstępnie wypełniony wcześniej wprowadzonym komunikatem zatwierdzenia. Oznacza to, że nie tworzymy nowego commitu, ale edytujemy poprzedni.
Podsumowanie
Polecenie git commit
jest jedną z podstawowych funkcji Git. Konieczne jest wcześniejsze użycie polecenia git add
, aby wybrać zmiany, które mają zostać przeniesione do przechowalni dla następnego commita. Następnie używa się polecania git commit
, aby utworzyć migawkę zmian w przechowalni na osi czasu projektu Git. Dowiedz się więcej o stosowaniu polecenia git add na załączonej stronie. Można też użyć polecenia git status, aby przejrzeć stan przechowalni i oczekującego commita.
Modele zatwierdzania SVN i Git znacząco się różnią, ale często myli się je ze względu na zbieżną terminologię. Jeśli zaczynasz korzystać z Git, mając doświadczenie z systemem SVN, warto zapamiętać, że w Git commity są rozwiązaniem tanim i powinny być często używane. Podczas gdy commity SVN to kosztowna operacja oparta na zdalnym zapytaniu, commity Git wykonuje się lokalnie przy użyciu wydajniejszego algorytmu.
Udostępnij ten artykuł
Następny temat
Zalecane lektury
Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.