Istnieją sposoby zmiany wiadomości z późniejszych zatwierdzeń:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Jak możesz zmienić komunikat zatwierdzenia pierwszego zatwierdzenia (który nie ma rodzica)?
git filter-branch --msg-filter
Odpowiedzi:
Zakładając, że masz czyste drzewo robocze, możesz wykonać następujące czynności.
źródło
git rebase --onto HEAD <sha1-of-root> master
.git rebase
.git rebase
stosuje zatwierdzenia w <branch> (master
), które nie są w <upstream>;HEAD
nie mamaster
, więc Twoja wersja próbuje zastosować wszystkiemaster
.git rebase --onto HEAD <sha1-of-root>
master, gdzie<sha1-of-root>
jest to samo, co używanegit checkout <sha1-of-root>
. W przeciwnym razie będziesz mieć 2first commit
.HEAD
zapewnia, że wszystkie zatwierdzenia są brane pod uwagę i że możemy użyć dwuparametrowej wersji rebase, aby przejść z powrotem na master. Pamiętaj, że ta odpowiedź poprzedza istnienie--root
opcji rebase.Od wersji Git 1.7.12 możesz teraz używać
Dokumentacja
źródło
Aby rozwinąć odpowiedź ecdpalmy , możesz teraz użyć
--root
opcji, aby powiedziećrebase
, że chcesz przepisać root / first commit:Następnie zatwierdzenie główne pojawi się na liście DO ZROBIENIA w bazie danych i możesz go edytować lub przeredagować:
Oto wyjaśnienie
--root
z dokumentacji Git rebase (moje podkreślenie):źródło
Aby zapewnić alternatywę dla wyżej ocenianych odpowiedzi:
Jeśli tworzysz repozytorium i wiesz z góry, że będziesz opierać się na jego „pierwszym” prawdziwym zatwierdzeniu w przyszłości, możesz całkowicie uniknąć tego problemu, tworząc wyraźne puste zatwierdzenie na początku:
i dopiero wtedy zacznij robić „prawdziwe” zatwierdzenia. Następnie, na przykład, możesz łatwo zmienić bazę na standardowe zatwierdzenie
git rebase -i HEAD^
źródło
.gitattributes
pliku zamiast wykonania pustego zatwierdzenia.Możesz użyć
git filter-branch
:źródło
-- --all
opcja rzeczywiście jest kluczem w tym przypadku, aby móc również obsługiwać rootowanie.