Примечание: Вы не должны изменять коммиты, которые были переданы в другое репо каким-либо образом , если вы не знаете последствия .
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
уничтожит все локальные изменения! ).