Предполагая, что ваша ветка вызывается masterкак здесь, так и удаленно, и что ваш удаленный вызывается, originвы можете сделать:
git reset --hard <commit-hash>
git push -f origin master
Однако вам следует избегать этого, если кто-то еще работает с вашим удаленным репозиторием и извлек ваши изменения. В этом случае было бы лучше отменить коммиты, которые вам не нужны, а затем нажать как обычно.
Обновление: вы объяснили ниже, что другие люди извлекли изменения, которые вы выдвинули, поэтому лучше создать новый коммит, который отменит все эти изменения . В этом ответе от Якуба Наребски есть хорошее объяснение ваших возможностей сделать это . Какой из них наиболее удобен, зависит от того, сколько коммитов вы хотите вернуть, и какой метод имеет для вас наибольшее значение.
Поскольку из вашего вопроса ясно, что вы уже использовали git reset --hardдля сброса masterветки, вам может потребоваться начать с использования, git reset --hard ORIG_HEADчтобы переместить ветку туда, где она была раньше. (Как всегда git reset --hard, убедитесь, что git statusон чистый, что вы находитесь на правильной ветке и что вы знаете, git reflogкак инструмент для восстановления явно потерянных коммитов.) Вы также должны проверить, ORIG_HEADуказывает ли правильный коммит, с помощью git show ORIG_HEAD.
Поиск проблемы:
Если вы получаете сообщение типа " ! [Удаленный отклонен] a60f7d85 -> master (обработчик предварительного получения отклонен) "
тогда вы должны разрешить переписывание истории ветки для конкретной ветки. Например, в BitBucket говорится: «Переписывание истории ветвей запрещено». Есть флажок с именем, Allow rewriting branch historyкоторый вы должны проверить.
origin/masterпользователи не тянули и не давили? Изменение истории общедоступного (то есть нелокального) хранилища - это то, чего вы хотите избегать всегда.