Подтвердить что ты не робот

Как отменить фиксацию в git?

Я не знаю, как работает git. Я по ошибке совершил ошибку и хочу ее вернуть. Я сделал

git reset --hard HEAD~1

Beware Fellow Googlers: Это не только отменяет фиксацию, но и отменяет все изменения файла!

и теперь проект вернется на мою машину, но не на github. Если я попытаюсь вытолкнуть этот код, я получаю сообщение об ошибке "Ваша ветка отстает от" origin/master "на 1 commit и может быть переадресована вперед". Как удалить эту фиксацию из github?

4b9b3361

Ответ 1

Вы можете сделать git push --force, но помните, что вы переписываете историю, и любой, кто использует репо, будет иметь проблемы с этим.

Если вы хотите предотвратить эту проблему, не используйте reset, а используйте git revert

Ответ 2

В этой статье есть отличное объяснение о том, как обойти различные сценарии (где совершена фиксация, а также нажатие ИЛИ просто фиксация перед нажатием):

http://christoph.ruegg.name/blog/git-howto-revert-a-commit-already-pushed-to-a-remote-reposit.html

Из статьи самая простая команда, которую я видел, чтобы вернуть предыдущую фиксацию своим идентификатором фиксации, был:

git revert dd61ab32

Ответ 3

Или вы можете попробовать использовать git revert http://www.kernel.org/pub/software/scm/git/docs/git-revert.html. Я думаю, что что-то вроде git revert HEAD~1 -m 1 вернет вашу последнюю фиксацию (если она еще последняя фиксация).

Ответ 4

Не могу прокомментировать другие ответы, я предоставлю немного дополнительной информации.

Если вы хотите 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

Ответ 5

Я думаю, вам нужно нажать на фиксацию. Итак, pull из github снова, включая фиксацию, которую вы хотите вернуть, затем используйте git revert и нажмите результат.

Если вам не нравятся клоны других людей, которые были сломаны в вашем хранилище github, вы также можете удалить и воссоздать главную ветвь на github после reset: git push origin :master.

Ответ 6

git push -f может быть?

man git-push расскажет больше.