Итак, во-первых, нажатие после сброса не означает, что фиксация «потеряна навсегда». Возможно, вы чувствуете, что это не относится к делу, потому что есть другие причины, по которым простой сброс не будет работать так, как вы хотите в Вообще-то, но если вы хотите разработать собственные сценарии использования git, вам нужно начать с правильного понимания того, как он управляет информацией.
И, как вы заметили, не существует простых команд git, которые отображаются на ваши операции «отменить» и «повторить» - потому что вы описываете не то, для чего предназначен git. Это не значит, что он может не делайте этого - это очень гибко. Но это значит, что вы пытаетесь разработать свой собственный вариант использования.
Так что нет простого решения. Вам нужно будет спроектировать крайние случаи и случаи, которые вы закрыли (когда вы отклонились после отмены, вы сказали, что хотите, чтобы старое состояние, которое вы отменяли, все еще было доступно и видимо - но как вы хотите, чтобы это было показано, и как вы хотите сослаться на это?
И после того, как вы выполнили эту проектную работу, вам придется создавать программное обеспечение для ее реализации. Может быть, вы найдете функциональность git, чтобы обеспечить хорошую основу для этого, и в этом случае вы можете написать сценарии, которые объединяют команды git. Но это будет не просто «выполнить эту единственную команду», а, скорее всего, задействовать команды, которые реже используются конечными пользователями (сантехнические команды).
Как мы теперь надеемся, подробный пошаговый ответ выходит за рамки вопросов и ответов о переполнении стека. Так что это возвращает меня к началу - вам нужно начать с подробного понимания того, как git обрабатывает данные, которые вы передаете в него. Если у вас есть конкретные вопросы в том же духе, и если (довольно хорошая, хотя иногда и плохо сформулированная) документация git не проясняет вопросы, то у вас может возникнуть вопрос, на который мы можем разумно ответить.