Squash Git confirma no meio de uma ramificação

Quero esmagar vários commits juntos no meio de uma ramificação sem modificar os commits antes e depois.

Eu tenho :

A -- B -- C -- D -- E -- F -- G
|                             |
master                        dev
origin/master

Eu quero esmagar isso em

A -- H -- E -- F -- G
|                   |
master              dev
origin/master

OndeH é equivalente aB -- C -- D. E eu quero poder especificar a mensagem de confirmação deH. A é a última confirmação que foi enviada por push, para que todas as confirmações posteriores possam ser reescritas sem atrapalhar o servidor. A idéia é limpar a história antes que eu avancemaster.

Como eu posso fazer isso ?

PS: Observe que, no meu caso, na verdade, tenho muito mais do que 3 comprometimentos para esmagar no meio, mas se eu puder fazer isso com 3, devo conseguir com mais.

PPS: Além disso, se possível, eu preferiria uma solução em queE, F eG permanecem intocados (principalmente em relação à data de confirmação).

questionAnswers(1)

yourAnswerToTheQuestion