Как вернуть первоначальный git commit?

Я впервые передаю репозиторий git; Затем я сожалею о коммите и хочу его вернуть. Я пытаюсь

# git reset --hard HEAD~1

Я получаю это сообщение:

fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.

Это коммит является первым фиксатором репозитория. Любая идея как отменить git initial commit?

Ответ 1

Вам просто нужно удалить ветку, в которой вы находитесь. Вы не можете использовать git branch -D, поскольку у этого есть проверка безопасности против этого. Вы можете использовать update-ref для этого.

git update-ref -d HEAD

Не используйте rm -rf .git или что-то вроде этого, так как это полностью уничтожит весь ваш репозиторий, включая все другие ветки, а также ветку, которую вы пытаетесь выполнить reset.

Ответ 2

Вы можете удалить HEAD и восстановить репозиторий в новое состояние, где вы можете создать новый первоначальный коммит:

git update-ref -d HEAD

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

git push --force origin

Ответ 3

Самый простой способ:

rm -fr .git

из каталога, в котором вы выполнили git init.

Ты ничего не хочешь сохранить, поэтому ты ничего не теряешь. Тем не менее, это безопасно, только если у вас нет ничего другого в вашем репозитории. В условиях, описанных в вопросе "Первичный репозиторий commit first time — то пожалеете", это безопасно. Очень часто, однако, это не безопасно.

Ответ 4

Этот вопрос был связан с этим сообщением в блоге, и было предложено альтернативное решение для более новых версий Git:

git branch -m master old_master
git checkout --orphan master
git branch -D old_master

Это решение предполагает, что:

  • У вас есть только одна фиксация на ветке master
  • Нет ветки с именем old_master, поэтому я могу использовать это имя

Он переименует существующую ветвь в old_master и создаст новую, потерянную, ветку master (например, создан для новых репозиториев), после которой вы можете свободно удалять old_master... или нет. До вас.

Ответ 5

Вы не можете. Итак:

rm -rf .git/
git init
git add -A
git commit -m 'Your new commit message'

Ответ 6

git reset --hard внести изменения, затем выполните

git add -A
git commit --amend --no-edit 

или

git add -A
git commit --amend -m "commit_message"

а затем

git push origin master --force

- сила перепишет это обязательство, которое вы сбросили на первом шаге.

Не делайте этого, потому что вы собираетесь идти против всей идеи систем VCS и git в частности. Единственный хороший метод - создать новую и удалить ненужную ветку. См. git help branch для информации.