Это очень круто, но довольно круто, так что я просто брошу его на ринг:
GIT_EDITOR='f() { if [ "$(basename $1)" = "git-rebase-todo" ]; then sed -i "2,\$s/pick/squash/" $1; else vim $1; fi }; f' git rebase -i foo~5 foo
Перевод: предоставьте новый «редактор» для git, который, если имя редактируемого файла равно git-rebase-todo
(интерактивная подсказка rebase), изменяет все, кроме первого «pick» на «squash», а в противном случае порождает vim - так что когда вам предложат отредактировать сжатое сообщение о коммите, вы получите vim. (И, очевидно, я давил последние пять коммитов на ветке foo, но вы можете изменить это так, как вам нравится.)
Я бы, наверное, сделал то, что Марк Лонгэйр предложил , однако.