Deshacer cambio en git (no reescribir el historial)

Hice un cambio en un guión y lo comprometí. Luego realicé algunos otros cambios y los envié a un repositorio remoto y tal.

Entonces me di cuenta de que el primer cambio que mencioné fue estúpido, y quiero deshacerlo ... ¿Puedo "no aplicar" ese compromiso, sin copiar / pegar manualmente el diff?

Como ejemplo: tengo dos archivos,a.py yb.py:

Commit 1:
I delete a function in a.py

Commit 2:
I change a few lines in b.py

Commit 3:
I change the docstring in a.py

¿Puedo deshacer la eliminación de esa función y hacer que aparezca como "commit 4" (en lugar de eliminar commit 1)

Respuestas a la pregunta(4)

Su respuesta a la pregunta