Git
Zobowiązanie się
Szukaj…
Wprowadzenie
Zatwierdzenia w Git zapewniają rozliczalność, przypisując autorom zmiany w kodzie. Git oferuje wiele funkcji dla specyficzności i bezpieczeństwa zatwierdzeń. W tym temacie wyjaśniono i przedstawiono odpowiednie praktyki i procedury związane z zatwierdzaniem Git.
Składnia
- git commit [flagi]
Parametry
Parametr | Detale |
---|---|
- wiadomość, -m | Wiadomość do włączenia w zatwierdzenie. Określenie tego parametru pomija normalne zachowanie Gita podczas otwierania edytora. |
--modyfikować | Określ, że zmiany aktualnie wprowadzane powinny zostać dodane (zmienione) do poprzedniego zatwierdzenia. Uważaj, to może przepisać historię! |
--bez edytowania | Użyj wybranej wiadomości zatwierdzenia bez uruchamiania edytora. Na przykład git commit --amend --no-edit poprawia zatwierdzenie bez zmiany komunikatu zatwierdzenia. |
- wszystkie, -a | Zatwierdź wszystkie zmiany, w tym zmiany, które nie zostały jeszcze wprowadzone. |
--data | Ręcznie ustaw datę, która zostanie powiązana z zatwierdzeniem. |
--tylko | Zatwierdź tylko określone ścieżki. Nie spowoduje to zatwierdzenia tego, co aktualnie wystawiłeś, chyba że otrzymałeś takie polecenie. |
--patch, -p | Użyj interaktywnego interfejsu wyboru łatki, aby wybrać zmiany do zatwierdzenia. |
--Wsparcie | Wyświetla stronę man dla git commit |
-S [keyid], -S --gpg-sign [= keyid], -S --no-gpg-sign | Podpisanie zatwierdzenia, zatwierdzenie znaku GPG, przeciwdziałanie commit.gpgSign Zmienna konfiguracyjna commit.gpgSign |
-n, - brak weryfikacji | Ta opcja omija przechwytywanie przed zatwierdzeniem i zatwierdzeniem msg. Zobacz także haki |
Zatwierdzanie bez otwierania edytora
Git zwykle otwiera edytor (jak vim
lub emacs
) po uruchomieniu git commit
. Przekaż opcję -m
, aby określić komunikat z wiersza polecenia:
git commit -m "Commit message here"
Twoja wiadomość zatwierdzenia może przechodzić przez wiele wierszy:
git commit -m "Commit 'subject line' message here
More detailed description follows here (after a blank line)."
Alternatywnie możesz przekazać wiele argumentów -m
:
git commit -m "Commit summary" -m "More detailed description follows here"
Zobacz Jak napisać wiadomość Git Commit .
Udacity Git Commit Message Style Guide
Zmiana zatwierdzenia
Jeśli twoje ostatnie zatwierdzenie nie zostało jeszcze opublikowane (nie zostało przekazane do repozytorium nadrzędnego), możesz je zmienić.
git commit --amend
Spowoduje to umieszczenie aktualnie wprowadzonych zmian w poprzednim zatwierdzeniu.
Uwaga: Można tego również użyć do edycji niepoprawnego komunikatu zatwierdzenia. Spowoduje to wyświetlenie domyślnego edytora (zwykle vi
/ vim
/ emacs
) i pozwoli ci zmienić poprzednią wiadomość.
Aby określić wbudowany komunikat zatwierdzenia:
git commit --amend -m "New commit message"
Lub użyć poprzedniego komunikatu zatwierdzenia bez jego zmiany:
git commit --amend --no-edit
Zmiana aktualizuje datę zatwierdzenia, ale nie zmienia daty autora. Możesz powiedzieć gitowi, aby odświeżył informacje.
git commit --amend --reset-author
Możesz także zmienić autora zatwierdzenia za pomocą:
git commit --amend --author "New Author <[email protected]>"
Uwaga: Należy pamiętać, że zmiana ostatniego zatwierdzenia całkowicie go zastępuje, a poprzednie zatwierdzenie jest usuwane z historii oddziału. Należy o tym pamiętać podczas pracy z publicznymi repozytoriami i oddziałami z innymi współpracownikami.
Oznacza to, że jeśli wcześniejszy zatwierdzenie zostało już wypchnięte, po jego poprawieniu będziesz musiał push --force
.
Bezpośrednie zatwierdzanie zmian
Zwykle musisz użyć git add
lub git rm
aby dodać zmiany do indeksu, zanim będziesz mógł je git commit
. Przekaż opcję -a
lub --all
, aby automatycznie dodać każdą zmianę (do plików śledzonych) do indeksu, w tym usunięcia:
git commit -a
Jeśli chcesz również dodać komunikat zatwierdzenia, zrobiłbyś:
git commit -a -m "your commit message goes here"
Możesz także dołączyć dwie flagi:
git commit -am "your commit message goes here"
Nie musisz koniecznie zatwierdzać wszystkich plików jednocześnie. Pomiń flagę -a
lub --all
i określ, który plik chcesz zatwierdzić bezpośrednio:
git commit path/to/a/file -m "your commit message goes here"
Aby bezpośrednio zatwierdzić więcej niż jeden określony plik, możesz także określić jeden lub wiele plików, katalogów i wzorców:
git commit path/to/a/file path/to/a/folder/* path/to/b/file -m "your commit message goes here"
Tworzenie pustego zatwierdzenia
Ogólnie rzecz biorąc, puste zatwierdzenia (lub zatwierdzenia ze stanem identycznym z rodzicem) są błędem.
Jednak podczas testowania przechwytywania kompilacji, systemów CI i innych systemów, które uruchamiają zatwierdzenie, wygodnie jest móc łatwo tworzyć zatwierdzenia bez konieczności edycji / dotykania fałszywego pliku.
Zatwierdzenie --allow-empty
sprawdzenie.
git commit -m "This is a blank commit" --allow-empty
Wprowadzaj zmiany i zatwierdzaj zmiany
Podstawy
Po dokonaniu zmian w kodzie źródłowym, należy wystawić te zmiany z git, zanim będzie można je popełnić.
Na przykład, jeśli zmienisz README.md
i program.py
:
git add README.md program.py
Mówi to gitowi, że chcesz dodać pliki do następnego zatwierdzenia.
Następnie zatwierdź zmiany za pomocą
git commit
Zauważ, że otworzy to edytor tekstu, który często jest vim . Jeśli nie znasz Vima, możesz chcieć wiedzieć, że możesz nacisnąć i
aby przejść do trybu wstawiania , napisać wiadomość zatwierdzenia, a następnie nacisnąć Esc
i :wq
aby zapisać i wyjść. Aby uniknąć otwierania edytora tekstu, po prostu -m
do wiadomości flagę -m
git commit -m "Commit message here"
Komunikaty zatwierdzania często podlegają określonym regułom formatowania. Aby uzyskać więcej informacji, zobacz Dobre komunikaty zatwierdzania .
Skróty
Jeśli zmieniłeś wiele plików w katalogu, zamiast wyświetlać każdy z nich, możesz użyć:
git add --all # equivalent to "git add -a"
Lub, aby dodać wszystkie zmiany, nie uwzględniając plików, które zostały usunięte , z katalogu najwyższego poziomu i podkatalogów:
git add .
Lub tylko dodawać pliki, które są aktualnie śledzone („aktualizacja”):
git add -u
W razie potrzeby przejrzyj zmiany etapowe:
git status # display a list of changed files
git diff --cached # shows staged changes inside staged files
Na koniec zatwierdz zmiany:
git commit -m "Commit message here"
Alternatywnie, jeśli zmodyfikowałeś tylko istniejące pliki lub usunąłeś pliki i nie utworzyłeś żadnych nowych, możesz połączyć działania git add
i git commit
w jednym poleceniu:
git commit -am "Commit message here"
Zauważ, że spowoduje to stopniowanie wszystkich zmodyfikowanych plików w taki sam sposób, jak git add --all
.
Wrażliwe dane
Nigdy nie powinieneś dopuszczać żadnych poufnych danych, takich jak hasła, a nawet klucze prywatne. Jeśli tak się stanie, a zmiany zostaną już przekazane na serwer centralny, rozważ wszelkie wrażliwe dane jako zagrożone. W przeciwnym razie możliwe jest później usunięcie takich danych. Szybkim i łatwym rozwiązaniem jest użycie „BFG Repo-Cleaner”: https://rtyley.github.io/bfg-repo-cleaner/ .
Polecenie bfg --replace-text passwords.txt my-repo.git
odczytuje hasła z pliku passwords.txt
i zamienia je na ***REMOVED***
. Ta operacja uwzględnia wszystkie poprzednie zatwierdzenia całego repozytorium.
Zobowiązanie w imieniu kogoś innego
Jeśli ktoś napisał kod, który popełniasz, możesz przypisać --author
opcję --author
:
git commit -m "msg" --author "John Smith <[email protected]>"
Możesz także podać wzór, którego Git użyje do wyszukiwania poprzednich autorów:
git commit -m "msg" --author "John"
W takim przypadku zostaną użyte informacje o autorze z ostatniego zatwierdzenia z autorem zawierającym „John”.
Na GitHub zatwierdzenia dokonane w jeden z powyższych sposobów pokażą dużą miniaturę autora, z mniejszą i na początku:
Zatwierdzanie zmian w określonych plikach
Możesz zatwierdzić zmiany dokonane w określonych plikach i pominąć ich przemieszczanie za pomocą git add
:
git commit file1.c file2.h
Lub możesz pierwszy etap plików:
git add file1.c file2.h
i dokonaj ich później:
git commit
Dobre komunikaty zatwierdzania
Ważne jest, aby ktoś przeglądający git log
łatwo zrozumiał, o co chodzi w każdym zatwierdzeniu. Dobre komunikaty zatwierdzania zwykle zawierają szereg zadań lub problemów w module śledzącym oraz zwięzły opis tego, co zostało zrobione i dlaczego, a czasem także jak to zostało zrobione.
Lepsze wiadomości mogą wyglądać następująco:
TASK-123: Implement login through OAuth
TASK-124: Add auto minification of JS/CSS files
TASK-125: Fix minifier error when name > 200 chars
Podczas gdy następujące komunikaty nie byłyby tak przydatne:
fix // What has been fixed?
just a bit of a change // What has changed?
TASK-371 // No description at all, reader will need to look at the tracker themselves for an explanation
Implemented IFoo in IBar // Why it was needed?
Sposobem sprawdzenia, czy komunikat zatwierdzenia jest napisany we właściwym nastroju, jest zastąpienie go pustym komunikatem i sprawdzenie, czy ma to sens:
Jeśli dodam ten zatwierdzenie, będę ___ w moim repozytorium.
Siedem zasad wielkiego komunikatu git commit
- Oddziel wiersz tematu od ciała pustą linią
- Ogranicz wiersz tematu do 50 znaków
- Wielkie litery tematu
- Nie kończ wiersza tematu kropką
- Użyj trybu rozkazującego w temacie
- Ręcznie owinąć każdą linię ciała 72 znakami
- Użyj ciała, aby wyjaśnić, co i dlaczego zamiast tego
7 zasad z bloga Chrisa Beama .
Podjęcie w określonym dniu
git commit -m 'Fix UI bug' --date 2016-07-01
Parametr --date
ustawia datę autora . Ta data pojawi się na przykład na standardowym wyjściu git log
.
Aby również wymusić datę zatwierdzenia :
GIT_COMMITTER_DATE=2016-07-01 git commit -m 'Fix UI bug' --date 2016-07-01
Parametr date akceptuje elastyczne formaty obsługiwane przez datę GNU, na przykład:
git commit -m 'Fix UI bug' --date yesterday
git commit -m 'Fix UI bug' --date '3 days ago'
git commit -m 'Fix UI bug' --date '3 hours ago'
Jeśli data nie określa godziny, zostanie użyta aktualna godzina i tylko data zostanie zastąpiona.
Wybór linii, które powinny być rozmieszczone w celu zatwierdzenia
Załóżmy, że masz wiele zmian w jednym lub kilku plikach, ale z każdego pliku chcesz zatwierdzić tylko niektóre zmiany, możesz wybrać żądane zmiany, używając:
git add -p
lub
git add -p [file]
Każda ze zmian będzie wyświetlana osobno, a dla każdej zmiany zostaniesz poproszony o wybranie jednej z następujących opcji:
y - Yes, add this hunk
n - No, don’t add this hunk
d - No, don’t add this hunk, or any other remaining hunks for this file.
Useful if you’ve already added what you want to, and want to skip over the rest.
s - Split the hunk into smaller hunks, if possible
e - Manually edit the hunk. This is probably the most powerful option.
It will open the hunk in a text editor and you can edit it as needed.
Spowoduje to wyodrębnienie części wybranych plików. Następnie możesz zatwierdzić wszystkie zmiany etapowe w następujący sposób:
git commit -m 'Commit Message'
Zmiany, które nie zostały wprowadzone lub zatwierdzone, będą nadal pojawiać się w plikach roboczych i mogą zostać zatwierdzone później, jeśli będzie to wymagane. Lub jeśli pozostałe zmiany są niepożądane, można je odrzucić za pomocą:
git reset --hard
Oprócz rozbicia dużej zmiany na mniejsze zatwierdzenia, to podejście jest również przydatne do przeglądu tego, co zamierzasz zatwierdzić. Po indywidualnym potwierdzeniu każdej zmiany masz możliwość sprawdzenia, co napisałeś, i możesz uniknąć przypadkowego umieszczenia niepożądanego kodu, takiego jak instrukcje println / logowania.
Zmiana czasu zatwierdzenia
Możesz zmienić czas użycia zatwierdzenia
git commit --amend --date="Thu Jul 28 11:30 2016 -0400"
lub nawet
git commit --amend --date="now"
Zmiana autora zatwierdzenia
Jeśli dokonasz zatwierdzenia jako niewłaściwy autor, możesz go zmienić, a następnie zmienić
git config user.name "Full Name"
git config user.email "[email protected]"
git commit --amend --reset-author
Zatwierdzanie podpisywania GPG
Określ swój identyfikator klucza
gpg --list-secret-keys --keyid-format LONG /Users/davidcondrey/.gnupg/secring.gpg -------------------------------------- sec 2048R/YOUR-16-DIGIT-KEY-ID YYYY-MM-DD [expires: YYYY-MM-DD]
Twój identyfikator to 16-cyfrowy alfanumeryczny kod po pierwszym ukośniku.
Zdefiniuj swój identyfikator klucza w konfiguracji git
git config --global user.signingkey YOUR-16-DIGIT-KEY-ID
Począwszy od wersji 1.7.9, git commit akceptuje opcję -S, aby dołączyć podpis do twoich zatwierdzeń. Użycie tej opcji spowoduje wyświetlenie monitu o podanie hasła GPG i dodanie podpisu do dziennika zmian.
git commit -S -m "Your commit message"