Предположим, есть три коммита:
коммит 1 - мелкие правки;
коммит 2 - серьезная переделка;
коммит 3 - снова мелкие правки.
Хочу слить коммиты 1 и 3 в один при помощи rebase. Не пойму, как это сделать, ведь при помощи squash можно склеить только подряд идущие коммиты, т. е. можно, например, приклеить 3 к 2, но не 3 к 1.
Склеить можно только соседние коммиты, следовательно что придётся поменять порядок коммитов, чтобы нужные оказались рядом. Чтобы снизить вероятность сложных конфликтов, лучше поменять местами первый и второй коммиты наверное.
Это может быть не просто. Оцените необходимость этой операции прежде чем действовать, можно сильно навредить репозиторию / коду.
Задачу можно выполнить через интерактивный rebase. В процессе с высокой вероятностью возникнут конфликты. Я бы делал в 2 этапа. Первым делом расположил бы коммиты в нужном порядке
git rebase -i хеш_коммита_3^
В открывшемся редакторе можно выставить коммиты в нужном порядке.
После сохранения файла, вероятнее всего появится сообщение о неразрешенных конфликтах - их все необходмио разрешить, добавить в индекс и продолжить rebase через git rebase --continue
После успеха, можно повторить интерактивный rebase с целью сделать squash.