Вы должны сделать интерактивный ребаз. Прочитайте страницу помощи для git rebase для деталей. Короткий ответ: вы продолжите и зафиксируете свои «средние» изменения как обычно, а затем запустите git rebase -i HEAD~4
. Он выведет список последних 3 коммитов в текстовом редакторе. Просто измените порядок коммитов, где самый новый коммит находится посередине, а затем сохраните и выйдите из редактора. Git попытается перестроить историю в новом порядке. Это может закончиться конфликтами. Если это так, исправьте их, как если бы вы конфликтовали слиянием, а затем запустите git rebase --continue
после того, как они все исправлены и добавлены. Он говорит вам все это, когда у вас есть конфликт, так что просто прочитайте сообщения об ошибках, и все будет в порядке.
РЕДАКТИРОВАТЬ: на самом деле, похоже, что вы хотите редактировать существующий коммит. В этом случае, когда появится редактор, переместите ваш новый временный коммит, чтобы он был рядом с commit3, а затем измените команду на «squash» с «pick»:
pick 123456 commit3
squash 541343 tmpcommit
pick 654321 commit2
pick 431523 commit1
EDIT2: если ветвь и commit1, commit2 и commit3 уже общедоступны, то вам не следует перебазировать. Опять же, вы не должны изменять коммиты, так что весь вопрос будет спорным. Я предполагаю, что это частный филиал или тот, который, как ожидают другие, будет перебазирован и перемотан.