Czy istnieje sposób edycji komunikatu zatwierdzenia po zatwierdzeniu i wypchnięciu do GitHub? Widzę, że istnieje „dodaj notatkę”, a także wbudowane komentarze, ale nie ma rzeczywistej edycji wiadomości zatwierdzenia. W rozszerzeniach git znajduje się również „zmień zatwierdzenie”, ale to nie edytuje istniejącej wiadomości.
129
Odpowiedzi:
git rebase -i <commit hash you want to change>^
Spowoduje to otwarcie domyślnego edytora (zwykle vi ) z listą zatwierdzeń i działań dla każdego z nich. Domyślnie akcja jest
pick
.Dla każdego zatwierdzenia, które chcesz zmienić wiadomość, zmień
pick
nareword
.Zapisz i wyjdź (w vi:)
:wq
.Dla każdego takiego zatwierdzenia otrzymasz edytor do edycji komunikatu zatwierdzenia. Zmień go według własnego uznania, zapisz i wyjdź.
Po zakończeniu edycji wszystkich komunikatów zatwierdzenia powrócisz do wiersza polecenia i uzyskasz nowe drzewo ze zaktualizowanymi wiadomościami.
Możesz teraz przesłać je do github za pomocą
git push origin --force
.Jeśli potrzebujesz tylko naprawić ostatnie zatwierdzenie, możesz zastąpić kroki 1-4
git commit --amend
.źródło
^
tam jestem - naprawdę zasugerowałem bazowanie na nadrzędnym zatwierdzeniu, które chcesz zmienić.^^
aby zakończyć polecenie dosłownie,^
np .:git rebase -i 2c747b32^^
W Intellij Idea możesz to zrobić tak łatwo.
źródło
git push origin --force
później, jak sugeruje odpowiedź @ Mureinik.jeśli twój wykres git wygląda jak ...
(
df9c192
ib7ec061
osobno hashe zatwierdzania celu i zatwierdzenia nadrzędnego)możesz po prostu wpisać następujące instrukcje ...
Wyjaśnienie:
git reset --soft b7ec061
zachowa zmiany plików i zresetuje do nadrzędnego zatwierdzenia (tj. b7ec061)git commit -m "..."
utworzy lokalnie nowy zatwierdzeniegit push -f
wypchnie twój nowy commit na serwer i zastąpi stary (tj. df9c192)źródło
Inną opcją jest utworzenie dodatkowego „zatwierdzenia erraty” (i wypychania), który odwołuje się do obiektu zatwierdzenia zawierającego błąd - nowe zatwierdzenie erraty również zapewnia korektę. Zatwierdzenie errata jest zatwierdzeniem bez istotnych zmian kodu, ale ważnym komunikatem zatwierdzenia - na przykład dodaj jeden znak spacji do pliku readme i zatwierdź tę zmianę ważnym komunikatem zatwierdzenia lub użyj opcji git
--allow-empty
. Jest to z pewnością łatwiejsze i bezpieczniejsze niż ponowne bazowanie, nie modyfikuje prawdziwej historii i utrzymuje drzewo gałęzi w czystości (używającamend
jest również dobrym wyborem, jeśli poprawiasz ostatnie zatwierdzenie, ale zatwierdzenie errata może być dobrym wyborem dla starszych zatwierdzeń). Tego rodzaju rzeczy zdarzają się tak rzadko, że wystarczy udokumentować błąd. W przyszłości, jeśli będziesz musiał przeszukać dziennik git w poszukiwaniu słowa kluczowego funkcji, oryginalne (błędne) zatwierdzenie może się nie pojawić, ponieważ w tym oryginalnym zatwierdzeniu użyto niewłaściwego słowa kluczowego (oryginalnej literówki) - pojawi się jednak słowo kluczowe w erracie commit, która następnie wskaże ci oryginalne zatwierdzenie, które zawierało literówkę. Oto przykład:źródło
Odpowiedź @Mureinik jest dobra, ale dla początkującego niezrozumiała.
Pierwsza metoda:
git commit --amend
, zobaczysz:pick
Jest to już strona edycji i można bezpośrednio edytować górną wiadomość oraz zapisać i wyjść , np .:git push -u origin master --force
lub<how you push normally> --force
. Kluczem jest tutaj--force
.Druga metoda:
Możesz zobaczyć skrót zatwierdzenia przez
git log
lub wyciąg z adresu URL repozytorium, w moim przypadku jest to przykład881129d771219cfa29e6f6c2205851a2994a8835
Następnie możesz zrobić
git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
lubgit rebase -i HEAD^
(jeśli najnowsza)Zobaczyłbyś:
noop
, to prawdopodobnie źle wpisujesz, np. Jeśli robisz to,git rebase -i 881129d771219cfa29e6f6c2205851a2994a88
czego brakuje^
na końcu, lepiej zamknij edytor bez zapisywania i znajdź przyczynę:noop
problemu, po prostu zmień słowopick
nareword
, inne po prostu pozostają (w tym momencie nie edytujesz komunikatu zatwierdzenia), np .:git push -u origin master --force
lub<how you push normally> --force
. Kluczem jest tutaj--force
.Aby uzyskać więcej informacji, przeczytaj dokument .
źródło