Uwaga: Powinieneś nie zmieniać zobowiązań, które zostały pchnięte do innego repo w dowolny sposób , chyba że znasz consequences.
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
Rodzaj i
(Put Vima w trybie wstawiania)
zmienić listę wyglądać tak (Nie trzeba usunąć lub obejmować komunikat zatwierdzenia). Nie wprowadzaj błędów w pisowni squash
!:
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Rodzaj Esc następnie ZZ
(Save and exit 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
zmienić tekst, co chcesz popełnić nowa wiadomość wyglądać.Polecam to być opis zmian w popełnić A
i D
:
new_commit_message_for_A_and_D
Rodzaj Esc następnie ZZ
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)
Utworzono nowy commit 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 jakiś czas przez git rebase --hard D
(git rebase --hard
zniszczą wszelkie zmiany lokalne!).
Początkowo czytałem to jako "rebase D na A, squash D na A, a następnie na B na DA". Z odpowiedzi nie wynika jasno, że można to zrobić poprzez zmianę kolejności linii w edytorze tekstów. –