Примечание: вы должны не каким-либо образом изменять коммиты, которые были переданы другому репо, если вы не знаете последствий .
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
Тип i
(Переведите VIM в режим вставки)
Измените список так, чтобы он выглядел следующим образом (вам не нужно удалять или включать сообщение фиксации). Не опечатка squash
! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
Введите Escзатем ZZ
(Сохранить и выйти из 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
Тип i
Измените текст так, как вы хотите, чтобы выглядело новое сообщение о коммите. Я рекомендую это описание изменений в коммите A
и D
:
new_commit_message_for_A_and_D
Введите Escтогда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)
Вы создали новый коммит E
. Коммиты A
и D
больше не в вашей истории, но не ушли. Вы все еще можете восстановить их в этот момент и на некоторое время git rebase --hard D
(git rebase --hard
уничтожит все локальные изменения! ).