Se o histórico for simples (linear), um git rebase -i
deve fazer (as outras alternativas farão essencialmente o mesmo). Se você tiver várias ramificações, você terá que reimplantar elas na ramificação principal nos pontos corretos (sua "reescrita de uma confirmação antecipada" afetará apenas a ramificação que você modifica, outras apenas reterão a história original).
Eu faria isso (perigoso) experimentos em um clone e substituir o original quando feito e verificado correto. Por favor, note que quaisquer clones externos ficarão muito confusos com a história alterada, o único curso razoável de ação é fazer uma nova clonagem de cada um.