Jako użytkownik Gita regularnie spotykam się z sytuacją, w której muszę przerobić jedno lub więcej zatwierdzeń w sposób, który nie pasuje do --amend
lub rebase -i
z zatwierdzeniami poprawek. Zwykle zrobiłbym coś takiego
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Traktuję rozsądnie skomponowane komunikaty o zmianach całkiem poważnie. Zazwyczaj zawierają większy tekst z odniesieniami i uzasadnieniem zmiany. Do tej pory jestem bardzo zły na długi proces, aby odzyskać moje stare popełnić wiadomość za pomocą sortowania git reflog
, git log
a następnie skopiować i wkleić proces.
Czy jest lepszy sposób na rozwiązanie tego problemu? A jak by to było, gdyby moje składało się z więcej niż jednego zatwierdzenia?
Edycja: Po krótkim zastanowieniu myślę, że to, czego szukam, to funkcjonalność podobna do git stash dla komunikatów o zmianach, w których zatwierdzenia poprawek / zmian nie są odpowiednie.
źródło
git reset head~1
, czy twój stary komunikat dotyczący zmiany nie byłby po prostu drugim wpisem wreflog
?gitk
otwórz. W ten sposób nie będziesz musiał nawet używać reflogu. Alternatywnie, użyj,rev-parse <branch>
aby uzyskać hash przed zresetowaniem i użyj odpowiedzi od ibizaman.Odpowiedzi:
Po
git reset
jednym linijce może to zrobić:lub jeszcze krócej:
Możesz użyć innych opcji podanych przez @ user2718704 .
źródło
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
jest to najbardziej jasne.Podczas uruchamiania polecenia „git commit” musisz sprawdzić następujące opcje,
Do ponownego wykorzystania,
Aby edytować przy ponownym użyciu,
Aby zmienić autora,
źródło
Po co resetować, jeśli możesz hakować, naprawiać, hakować i po prostu biegać
git commit --amend --no-edit
; w ten sposób zachowując oryginalny komunikat o zatwierdzeniu.Aby to działało dla wielu zatwierdzeń, po prostu utwórz tymczasowe zatwierdzenie z najnowszymi zmianami, a następnie użyj interaktywnej rebase, aby zmiażdżyć poprzednie zatwierdzenie (zawierające dobry komunikat o zatwierdzeniu) z nowym tymczasowym, zachowując komunikat o zatwierdzeniu ze starego zatwierdzenia.
źródło
fixup
instrukcji, aby zadeklarować, że późniejsze zatwierdzenie ma na celu naprawienie poprzedniego zatwierdzenia i automatycznie użyje komunikatu o zatwierdzeniu z oryginału, odrzucając komunikat z zatwierdzenia poprawkowego.rebase -i
. Nigdy nie użyłem go w tym kontekście. W pozostałych przypadkach, takich jak ponowne połączenie, druga odpowiedź jest bardziej odpowiednia dla mojego pytania, więc oznaczyłem ją jako odpowiedź.Możesz rozważyć
git commit --reset-author -c <commit>
ponowne użycie komunikatu o zmianach przy edycji i bieżącym czasie.źródło