Открываем документацию и читаем чем отличается reset от reset --hard.
Там же читаем, что HEAD^ и HEAD~1 это одно и то же.
После успешного уничтожения последнего коммита, вы просто создаёте новый любым удобным способом и отправляете изменения в github так же любым удобным способом.
И, кстати, второй вариант не создаёт новый коммит.
А вообще, неплохо бы понимать что делает git, что такое коммит, что делает push и тогда ваши сложно-составные вопросы автоматически распадутся на кучу мелких и простых.
Например, нет никакого смысла в каждом вопросе повторять «и запушить». Ответ на вопрос «Как запушить изменённую историю?» никак не зависит от того как именно вы её меняли.
В общем придётся сильно извращаться, а всё из-за того, что кто-то поленился сделать нормальные урлы