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