Я использовал
git reset --hard dc082bc...вернуться к ответвлению назад к необходимому предыдущему состоянию, из-за некоторых плохих фиксаций. Это перемотало мое локальное прекрасное ответвление. Однако я хочу перемотать ответвление по 'источнику' к той же фиксации так, чтобы я мог запустить снова. Кто-либо мог сказать мне, как вернуться ответвление источника (не ведущее устройство) к этой фиксации?
Я судил ведущее устройство источника нажатия мерзавца, но это дает следующую ошибку
! [rejected] branch -> branch (non-fast-forward) error: failed to push some refs to 'git@github.com:xxx/xxx.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details.
Вы можете попробовать git push --force
, чтобы принудительно нажать.
--force
Обычно команда отказывается обновлять удаленную ссылку, которая не является предком локальной ссылки, использованной для ее перезаписи. Этот флаг отключает проверку.
Это может привести к тому, что удаленный репозиторий потеряет коммиты; используйте его с осторожностью.
Таким образом, если многие люди уже извлекли одну и ту же ветку из источника, это может вызвать некоторые проблемы с перебазированием на их стороне.
Эта операция может быть заблокирована на стороне сервера, как указывает ebneter (в комментариях):
Однако, в зависимости от того, как настроен пульт, это может не работать
- все мои центральные репозитории настроены наreceive.denyNonFastForwards = true
иreceive.denyDeletes = true
, и в этом случае любая такая операция должна выполняться на удаленном сервере.
Однако в случае GitHub, такие настройки недоступны для пользователя, управляющего его репозиторием GitHub.
Итак, если вы git push --force
по ошибке, все, что вам останется, это открыть обращение в службу поддержки GitHub , чтобы они могли проверить свои локальные (например, «GitHub») рефлоги и посмотрим, смогут ли они восстановить старые коммиты.
(Поскольку рефлоги являются локальными, как меня недавно вспомнили . Таким образом, коммиты, которые заменяются новыми во время push --force
, все еще видны, если нет » git gc
'или' git prune
'уже имели место на стороне сервера GitHub )
Итак, Марко Чеппи настаивает (в комментариях) ):
это может действительно испортить локальные репозитории других участников, если вы принудительно нажмете - хотя бывают случаи, когда это просто неизбежное зло (мне, возможно, приходилось делать это два раза за мою жизнь использования Git)