Mam drzewo robocze zawierające 3 commmity:
➜ ~ myproject git: (mistrz) git log
commit a99cce8240495de29254b5df8745e41815db5a75
Author: My Name <[email protected]>
Date: Thu Aug 16 00:59:05 2012 +0200
.gitignore edits
commit 5bccda674c7ca51e849741290530a0d48efd69e8
Author: My Name <[email protected]>
Date: Mon Aug 13 01:36:39 2012 +0200
Create .gitignore file
commit 6707a66191c84ec6fbf148f8f1c3e8ac83453ae3
Author: My Name <[email protected]>
Date: Mon Aug 13 01:13:05 2012 +0200
Initial commit (with a misleading message)
Teraz chcę reword
otrzymać wiadomość o zatwierdzeniu mojego pierwszego zatwierdzenia (6707a66)
➜ ~ myproject git: (mistrz) git rebase -i 6707
(… Wchodząc w vim)
pick 5bccda6 Create .gitignore file
pick a99cce8 .gitignore edits
# Rebase 6707a66..a99cce8 onto 6707a66
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
W tym przypadku chcę poprawić (reword
w języku git) omawiany komunikat dotyczący zmiany:
Początkowe zatwierdzenie (z mylącą wiadomością)
… Do czegoś odpowiedniego.
Nic dziwnego, że moja powyższa próba nie powiodła się, ponieważ pierwsze zatwierdzenie oczywiście nie ma żadnego zatwierdzenia rodzica . (A kiedy rebase
musisz odwołać się do następnego najstarszego zatwierdzenia przed tym, który chceszreword
, prawda?)
Istota mojego pytania, czy można to osiągnąć w jakikolwiek inny sposób?
Odpowiedzi:
Robić
git rebase -i --root
(wskaż
root
zamiast wskazywać na konkretne zatwierdzenie)W ten sposób pierwszy zatwierdzenie jest również dołączone i możesz
reword
go tak po prostu jak każdy inny.--root
Opcja została wprowadzona w Gitv1.7.12
(2012). Wcześniej jedyną opcją było użyciefilter-branch
lub--amend
, co jest zwykle trudniejsze do wykonania.Uwaga: zobacz także to podobne pytanie i odpowiedź .
źródło
Zawsze możesz użyć
git filter-branch --msg-filter
:źródło
-f
to będzie kontynuowane i zawsze przepisze commity z danej gałęzi. Wartość odniesienia gałęzi od pierwszego razu została zapisana w programierefs/original/master
przed uruchomieniem komendy.Istota pcreux ma dobry sposób na przeformułowanie pierwszego zatwierdzenia:
źródło
git rebase -i --root
jest droga, jak sugeruje florisla.