Git commit bez komunikatu o zatwierdzeniu

108

Jak mogę zatwierdzić zmiany bez określania komunikatu o zatwierdzeniu? Dlaczego jest to wymagane domyślnie?

Nik
źródło
6
Wreszcie, git commit -a --allow-empty-message -m ''nie będzie już nawet otwierać edytora. Zobacz moją odpowiedź poniżej
VonC
2
W systemie Windows to polecenie git commit -a --allow-empty-message -m ''marki popełnić z popełnić komunikat „ ''”, więc lepiej jest użyć tego polecenia zamiast: git commit -a --allow-empty-message -m "".
tav

Odpowiedzi:

137

git generalnie wymaga niepustego komunikatu, ponieważ dostarczenie znaczącego komunikatu zatwierdzenia jest częścią dobrej praktyki programistycznej i dobrego zarządzania repozytorium. Pierwsza linia komunikatu o zmianach jest używana w całym git; aby uzyskać więcej informacji, przeczytaj „Uwaga o komunikatach dotyczących zmian w Git” .

Jeśli otworzysz Terminal.app cdw katalogu swojego projektu i git commit -am ''zobaczysz, że nie powiedzie się, ponieważ pusty komunikat o zatwierdzeniu jest niedozwolony. Nowsze wersje git mają
--allow-empty-messageargument wiersza poleceń, w tym wersję git zawartą w najnowszej wersji Xcode. Pozwoli ci to użyć tego polecenia do wykonania zatwierdzenia z pustą wiadomością:

git commit -a --allow-empty-message -m ''

Przed --allow-empty-messageflagą trzeba było użyć commit-treepolecenia hydraulicznego. Można zobaczyć przykład użycia tego polecenia w rozdziale „Raw Git” z książki Git .

Jeremy W. Sherman
źródło
1
Nowsze wersje gitmają --allow-empty-messageargument wiersza poleceń. Zobacz dokumentację tutaj . Wspomina, że ​​kiedyś mogłeś zrobić to samo za pomocą polecenia hydraulicznego git-commit-tree.
Jeremy W. Sherman
18
Myślę, że zdanie "dostarczanie sensownego komunikatu o zatwierdzeniu jest częścią dobrej praktyki programistycznej" jest po prostu błędne - można powiedzieć, że przekazanie sensownego komunikatu o zatwierdzeniu jest uważane za część dobrej praktyki rozwojowej, ponieważ stwierdzenie to i tak dzieli - ja na jedno Uważam, że mniej informacji czasami prowadzi do mniejszego zamieszania, zwłaszcza że git oczywiście przechowuje rzeczywiste zmiany w repozytorium, a a git diffpokaże zainteresowanej stronie dokładnie, co zawiera zatwierdzenie, bez polegania na opisach pisanych przez ludzi. Maszyny powinny w miarę możliwości uchronić nas przed pracą.
AMN
2
@amn, właśnie zacząłem się zastanawiać nad tymi dziesiątkami tysięcy dobrze napisanych wiadomości o zatwierdzeniach, które napisałem, a które nigdy nie zostaną przez nikogo przeczytane. Dla mnie teraz wartość tego nawyku polega na tym, że zmusza mnie do spojrzenia na zmiany w celu ich opisania, co czasami sprawia, że ​​zauważam błędy. Ale masz rację. Rozważę zwrócenie większej uwagi na kod, a mniej na komunikat dotyczący zatwierdzenia.
osa
7
Git nie jest już używany tylko do tworzenia kodu. Kiedy aktualizuję stronę wiki GitHub lub dokument Overleaf LaTeX, zwykle nie mam nic do powiedzenia, ponieważ aktualizuję dokumentację. Wszystko, co ma znaczenie semantyczne dotyczące zmiany, jest zawarte w pliku różnicowym. Właściwie użyłem tekstu zmiany jako samego komunikatu o zmianach: całkowicie zbędny!
Jim Pivarski
1
@amn, czasami wynik działania polecenia git diffnie wymaga wyjaśnień, nawet jeśli osoba zatwierdzająca uważa, że ​​tak jest.
cowlinator
26

A jeśli dodasz do niego alias, to jeszcze lepiej, prawda?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Teraz wystarczy wykonać polecenie nccommit, nc z powodu braku komentarza i wszystko powinno zostać zatwierdzone.

dalvarezmartinez1
źródło
19

Podczas pracy nad ważną aktualizacją kodu, jeśli naprawdę potrzebujesz pośredniego punktu bezpieczeństwa, możesz po prostu zrobić:

git commit -am'.'

lub krócej:

git commit -am.
mdły
źródło
A co to robi?
fishinear
Dodaje zatwierdzenie z komunikatem „.”
beznadziejny
Używam tej metody, gdy dosłownie nie pamiętam tego, co umieściłem w zatwierdzeniu i jestem zbyt leniwy na diffto wszystko.
TheTechRobo36414519
16

Uwaga: uruchamiając git1.8.3.2 (lipiec 2013), następujące polecenie ( wspomniane powyżej przez Jeremy'ego W. Shermana ) nie otworzy już edytora:

git commit --allow-empty-message -m ''

Zobacz commit 25206778aac776fc6cc4887653fdae476c7a9b5a :

Jeśli podano pusty komunikat z opcją -mgit commit, to uruchamiany jest edytor.
To nieoczekiwane i niepotrzebne.
Zamiast używać długości łańcucha komunikatu do sprawdzania, czy użytkownik podał taki ciąg, pamiętaj bezpośrednio, czy -mpodano opcję .


git 2.9 (czerwiec 2016) poprawia zachowanie pustych wiadomości:

Zobacz zobowiązanie 178e814 (6 kwietnia 2016) autorstwa Adama Dinwoodie ( me-and) .
Zobacz commit 27014cb (07 kwietnia 2016) autorstwa Jeffa Kinga ( peff) .
(Scalone przez Junio ​​C Hamano - gitster- w zobowiązaniu 0709261 , 22 kwietnia 2016 r.)

commit: nie ignoruj ​​pustej wiadomości podanej przez -m ''

  • git commit --amend -m '' --allow-empty-message”, mimo że wygląda dziwnie, jest poprawnym żądaniem zmiany zatwierdzenia, tak aby nie zawierało w ogóle żadnej wiadomości.
    Z powodu błędnego wykrycia obecności w -mlinii poleceń, w końcu zachowaliśmy komunikat dziennika z oryginalnego zatwierdzenia.
  • git commit -m "$msg" -F file” powinno zostać odrzucone bez względu na $msgto, czy jest pustym łańcuchem, czy nie, ale z powodu tego samego błędu nie zostało odrzucone, gdy $msgjest puste.
  • git -c template=file -m "$msg"” powinien ignorować szablon, nawet jeśli $msgjest pusty, ale tak się nie stało i zamiast tego używał zawartości z pliku szablonu.
VonC
źródło
3

Nie potrzebujesz gita, aby to osiągnąć. Kreatywne użycie funkcji bash wystarczy. Jeśli nie dbasz o wiadomości, po prostu ustaw domyślną i zapomnij o niej.

function gitcom() {
  git commit -m "my default commit message"
}

Jeśli czujesz się naprawdę odważny, możesz dodawać, zatwierdzać i przesuwać za pomocą jednego polecenia

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Którą następnie uruchomisz jako

gitzap origin master

Możesz nawet zagłębić się głębiej i użyć parse_git_branch, aby zapisać sobie tam kilka naciśnięć klawiszy lub ustawić wspólne domyślne ustawienia „origin” i „master”.

Steven Garcia
źródło
1
Czy możesz podać więcej szczegółów na temat konfiguracji tej funkcji bash?
adaam
1
Zakładając, że korzystasz z systemu OSX lub Linux, możesz skopiować te funkcje i umieścić je w swoim .profile (powinien znajdować się w folderze domowym, jeśli nie, utwórz go). Otwórz nowe okno konsoli, a te polecenia będą dostępne. Wszelkie zmiany wprowadzone w tych plikach będą wymagały odświeżenia sesji bash, abyś mógł przyspieszyć pracę, dodając następujące aliasy do tego pliku: alias ea = "subl ~ / .profile" # subl to mój edytor tekstu, zastąp go własnym alias er = "source ~ / .profile" # to zostanie zresetowane Teraz, gdy chcesz dodać skróty, po prostu wpisz "ea" (edytuj aliasy) I aby odświeżyć er
Steven Garcia
2
Jeśli zwane skrypty git-comi git-zap(bez rozszerzenia) i umieszcza je gdzieś git można ich (czyli gdzieś w PATH) uważają, Git traktuje ich jak zwykłych poleceń git i można powołać się je tak: git com,git zap origin master
Manuzor
1
w bash to albo function gitcom {albo gitcom() {TMK, naprawić?
2

Git wymaga, aby zatwierdzenie miało komentarz, w przeciwnym razie nie przyjmie zatwierdzenia.

Możesz skonfigurować domyślny szablon z git jako domyślną wiadomością o zatwierdzeniu lub sprawdzić flagę --allow-empty-message w git. Myślę (nie jestem w 100% pewny), że możesz zmienić konfigurację gita, aby akceptował komunikaty o pustym zatwierdzeniu (co nie jest dobrym pomysłem). Zwykle każde zatwierdzenie powinno wymagać trochę pracy, co jest opisane w twojej wiadomości.

Daniel Kurka
źródło
1
Nie wiem, dlaczego ta odpowiedź została odrzucona. Zgadzam się, że zmuszanie Gita do akceptowania komunikatów o pustych zmianach lub używanie komunikatu typu „save” jest złym pomysłem. Przestań z tym walczyć i po prostu naucz się tego cholernego narzędzia.
Jezen Thomas,
2

Mam następującą konfigurację w moim prywatnym projekcie:

git config alias.auto 'commit -a -m "changes made from [device name]"'

W ten sposób, kiedy mi się spieszy, robię

git auto
git push

I przynajmniej wiem, z jakiego urządzenia wykonano zatwierdzenie.

e18r
źródło
1

Znalazłem najprostsze rozwiązanie:

git commit -am'save'

To wszystko, będziesz omijać komunikaty git commit.

możesz nawet zapisać to polecenie do basha lub innych rzeczy, aby było to prostsze.

Członkowie naszego zespołu zawsze piszą te wiadomości, ale prawie nikt nie zobaczy ich ponownie.

Komunikat o zatwierdzeniu to rzecz zabijająca czas, przynajmniej w naszym zespole, więc ją ignorujemy.

człowiek z brązu
źródło
-5

Komunikat dotyczący zatwierdzenia jest najlepszą praktyką, której należy zawsze przestrzegać. Chyba że jesteś jedynym programistą i to się nie zmieni w najbliższym czasie.

git commit -a -m 'asdfasdfadsfsdf'
coloradoblue
źródło
to rodzaj żartu. Ale w przypadku niewielkich zmian, które MUSISZ wykonać, aby przesłać zmiany do heroku (na przykład), jest to w porządku w pojedynczej instancji programisty.
coloradoblue