Ответ 1
Вы хотите сделать интерактивную rebase.
Первое, что мне нравится делать при опробовании команд git, - сделать резервную копию моей ветки:
$ git branch my-backup-branch
Скажем, что ваш коммит A1 имеет хэш 152274b
. Попробуйте следующее:
$ git rebase -i 152274b^
Эта команда выведет ваш редактор (обычно vim) примерно так:
pick 152274b A1
pick 14b0838 B1
pick 661b993 A2
pick a6510db B2
pick 557e171 A3
pick 85da0e4 B3
# Rebase 39a47e4..85da0e4 onto 39a47e4
#
# Commands:
# p, pick = use commit
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
Здесь вы можете изменить порядок коммитов, полностью удалить их и даже сквоить. В этом примере вы, вероятно, захотите переместить и скворовать следующим образом:
pick 152274b A1
squash 661b993 A2
squash 557e171 A3
pick 14b0838 B1
squash a6510db B2
squash 85da0e4 B3
Попробуй. Если вы закончите в состоянии, которое вам не нужно, вы всегда можете вернуться к состоянию, которое вы сохранили в своей ветке резервного копирования:
$ git reset --hard my-backup-branch