Вы хотите сделать интерактивную перебазировку .
Первое, что я хотел бы сделать, когда пробую команды git, это сделать резервную копию моей ветки:
$ git branch my-backup-branch
Допустим, ваш коммит А1 имеет хэш 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