Ответ 1
Вы можете сделать git push --force
, но помните, что вы переписываете историю, и любой, кто использует репо, будет иметь проблемы с этим.
Если вы хотите предотвратить эту проблему, не используйте reset, а используйте git revert
Я не знаю, как работает git. Я по ошибке совершил ошибку и хочу ее вернуть. Я сделал
git reset --hard HEAD~1
Beware Fellow Googlers: Это не только отменяет фиксацию, но и отменяет все изменения файла!
и теперь проект вернется на мою машину, но не на github. Если я попытаюсь вытолкнуть этот код, я получаю сообщение об ошибке "Ваша ветка отстает от" origin/master "на 1 commit и может быть переадресована вперед". Как удалить эту фиксацию из github?
Вы можете сделать git push --force
, но помните, что вы переписываете историю, и любой, кто использует репо, будет иметь проблемы с этим.
Если вы хотите предотвратить эту проблему, не используйте reset, а используйте git revert
В этой статье есть отличное объяснение о том, как обойти различные сценарии (где совершена фиксация, а также нажатие ИЛИ просто фиксация перед нажатием):
http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html
Из статьи самая простая команда, которую я видел, чтобы вернуть предыдущую фиксацию своим идентификатором фиксации, был:
git revert dd61ab32
Или вы можете попробовать использовать git revert http://www.kernel.org/pub/software/scm/git/docs/git-revert.html. Я думаю, что что-то вроде git revert HEAD~1 -m 1
вернет вашу последнюю фиксацию (если она еще последняя фиксация).
Не могу прокомментировать другие ответы, я предоставлю немного дополнительной информации.
Если вы хотите revert
последний фиксатор, вы можете использовать git revert head
. head
относится к самой последней фиксации в вашей ветке.
Причина, по которой вы используете head~1
при использовании reset
, заключается в том, что вы сообщаете Git "удалить все изменения в фиксации после" (reset --hard
) "commit one before head" (head~1
).
reset
относится к фиксации, revert
относится к фиксации.
Как указывалось в AmpT, вы также можете использовать SHA для фиксации, чтобы не идентифицировать его, а не считать, насколько он находится далеко от head
. SHA можно найти в журналах (git log
) и множестве других способов.
Вы также можете всегда использовать любые другие указатели в Git. например тег или ветвь. И может также использовать все эти другие другие способы ссылки: Commit https://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html#_specifying_revisions
Я думаю, вам нужно нажать на фиксацию. Итак, pull
из github снова, включая фиксацию, которую вы хотите вернуть, затем используйте git revert
и нажмите результат.
Если вам не нравятся клоны других людей, которые были сломаны в вашем хранилище github, вы также можете удалить и воссоздать главную ветвь на github после reset
: git push origin :master
.
git push -f
может быть?
man git-push
расскажет больше.