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