Jak dokonać bez zmian i nowej wiadomości?


150

Jak mogę utworzyć nową commiti utworzyć nową wiadomość, jeśli nie wprowadzono żadnych zmian w plikach?

Czy nie jest to możliwe, ponieważ kod zatwierdzenia (SHA?) Będzie taki sam?

Odpowiedzi:


187

Rzadko istnieje dobry powód, aby to zrobić, ale parametr jest --allow-emptyprzeznaczony dla pustych zatwierdzeń (bez zmiany plików), w przeciwieństwie do --allow-empty-messagepustych komunikatów o zatwierdzeniach. Możesz również przeczytać więcej, pisząc git help commitlub odwiedzając dokumentację online .

Podczas gdy obiekt drzewa (który ma własny hash) będzie identyczny, zatwierdzenie faktycznie będzie miało inny hash, ponieważ przypuszczalnie będzie miało inny znacznik czasu i komunikat, i na pewno będzie miało inne zatwierdzenie nadrzędne. Wszystkie te trzy czynniki są zintegrowane z gitalgorytmem wyznaczania wartości skrótu obiektu.


Jest to kilka powodów, dla których warto pustym popełnić (zawierające niektóre komentarze):

  • Jako „deklaratywne zatwierdzenie”, aby dodać narrację lub dokumentację (za pośrednictwem DavidaNeissa ), w tym dane po fakcie o zdaniu testów lub szarpnięć (za pośrednictwem Roberta Balickiego ).
  • Testowanie gitpoleceń bez generowania arbitralnych zmian (przez Vaelusa ).
  • Aby ponownie utworzyć usunięte repozytorium, używając gitolite(przez Tatsh ).
  • Aby dowolnie utworzyć nowe zatwierdzenie, na przykład w celu ponownego wyzwolenia narzędzi do kompilacji (za pośrednictwem mattLummus ) lub ze względu na osobiste logowanie lub metryki (przez DynamiteReed ). Jednak zastanów się dwa razy: w zależności od struktury gałęzi / scalania, zatwierdzenia mogą istnieć bardzo długo, więc strategia "po prostu nic nie wykonuj" może nieumyślnie zanieczyścić repozytorium zespołu tymczasowymi artefaktami przepływu pracy i utrudnić oddzielenie wersji kodu od efemeryczne okrucieństwo.

Inne strategie dodawania metadanych do drzewa zatwierdzenia obejmują:

  • Oddzielne gałęzie lub lekkie znaczniki, które zawsze wskazują na zatwierdzenie o określonym statusie (np. „Ostatnio zaakceptowane zatwierdzenie” lub „bieżące zatwierdzenie przejściowe”).
  • Znaczniki z adnotacjami umożliwiające rejestrowanie znacznika czasu, osoby zatwierdzającej i komunikatu, wskazując na istniejące zatwierdzenie bez dodawania wpisu w samym drzewie zatwierdzeń.
  • git notes skojarzyć zmienną notatkę z istniejącym niezmiennym zatwierdzeniem.

4
Zacząłem podążać za modelem gałęzi Git Flow . Kiedy tworzysz devgałąź, mastera następnie featgałąź bezpośrednio z gałęzi dev, featgałąź wygląda na pochodzącą z mastergałęzi, ponieważ nie ma żadnego wyróżniającego zatwierdzenia na devgałęzi, z której featpochodzi gałąź. Puste zatwierdzenie, gdy po raz pierwszy tworzysz devgałąź, pomaga ustalić devgałąź jako własną gałąź na czas nieokreślony, niezależną od master. Ogólnie jest to pomocne, gdy używasz gałęzi jako warstw i tworzysz dwie warstwy z jednego zatwierdzenia
Nowicjusz C

3
Kolejny powód: jeśli pominiesz coś ważnego w swoim komunikacie o zatwierdzeniu przed naciśnięciem, nie możesz tego zrobić, commit --amendjeśli pilot nie pozwala na wciskanie wymuszone. W ten sposób możesz pozwolić programistom zobaczyć ważną wiadomość, która jest powiązana z poprzednim zatwierdzeniem.
Andy J

2
Chcę to zrobić, ponieważ wrzuciłem zatwierdzenie, ale zapomniałem o czymś wspomnieć w komunikacie dotyczącym zmiany. Nasze komunikaty o zmianach są zintegrowane z oprogramowaniem do śledzenia problemów i ciągłej integracji, a treść komunikatu o zatwierdzeniu wpływa na te aplikacje. Czy jest lepszy sposób? To wydaje się być najlepszym rozwiązaniem w moim przypadku. Jedyne, co mogę sobie wyobrazić, to możliwość cofnięcia poprzedniego zatwierdzenia.
sytech

2
Po prostu użyłem tego do wyzwolenia naszego haka przed zatwierdzeniem, który skryptuje bazę danych. Więc były zmiany, po prostu git nie mógł ich zobaczyć, dopóki skrypt nie został uruchomiony. Mógłby to oczywiście uruchomić ręcznie, ale wtedy skrypt uruchomiłby się dwukrotnie.
yoyodyn

2
Bardzo przydatne podczas interakcji ze śledzeniem problemów wbudowanym w serwery git, takie jak github i gogs.
SimonF

45

Jeśli dobrze cię zrozumiałem, chcesz dokonać pustego zatwierdzenia. W takim przypadku potrzebujesz:

git commit --allow-empty

39

Puste zatwierdzenie z komunikatem

git commit --allow-empty -m "Empty test commit"

Pusty zatwierdzenie z pustą wiadomością

git commit --allow-empty --allow-empty-message

4

Jeśli używasz systemu takiego jak gitversion Wykonywanie tego rodzaju zatwierdzeń ma sens. Możesz mieć zatwierdzenie, które jest przeznaczone specjalnie do uderzania w wersję główną za pomocą komentarza + semver: major.


4

Może jako rozsądniejszą alternatywę możesz utworzyć tag z adnotacjami (nazwane zatwierdzenie z komunikatem). Zobacz git tag -aopcję.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.