Uwaga: Nie powinieneś w żaden sposób zmieniać zatwierdzeń, które zostały przekazane do innego repo, chyba że znasz konsekwencje .
git log --oneline -4
D commit_message_for_D
C commit_message_for_C
B commit_message_for_B
A commit_message_for_A
git rebase --interactive
pick D commit_message_for_D
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
Wpisz i
(Przełącz VIM w tryb wstawiania)
Zmień listę, aby wyglądała następująco (nie musisz usuwać ani dołączać komunikatu zatwierdzenia). Nie literuj źle squash
! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
EscNastępnie wpisz ZZ
(Zapisz i zamknij VIM)
# This is a combination of 2 commits.
# The first commit's message is:
commit_message_for_D
# This is the 2nd commit message:
commit_message_for_A
Rodzaj i
Zmień tekst na wygląd nowej wiadomości zatwierdzenia. Polecam, aby był to opis zmian w zatwierdzeniu A
i D
:
new_commit_message_for_A_and_D
Wpisz EscwięcZZ
git log --oneline -4
E new_commit_message_for_A_and_D
C commit_message_for_C
B commit_message_for_B
git show E
(You should see a diff showing a combination of changes from A and D)
Utworzyłeś nowy zatwierdzenie E
. Zobowiązania A
i D
nie są już w twojej historii, ale ich nie ma. Nadal możesz je odzyskać w tym momencie i przez chwilę git rebase --hard D
( git rebase --hard
zniszczy wszelkie lokalne zmiany! ).