Мерзавец: Как проигнорировать ускоренную перемотку вперед и вернуться источник [ответвление] для более ранней фиксации?

Я использовал

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.
8
задан igniteflow 2 July 2010 в 14:44
поделиться

1 ответ

Вы можете попробовать 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)

18
ответ дан 5 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: