Я впервые отправляюсь в репозиторий git; Затем я сожалею о коммите и хочу вернуть его. я попробую
# git reset --hard HEAD~1
Я получаю это сообщение:
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
Этот коммит является первым коммитом репозитория. Любая идея, как отменить первоначальный коммит git?
git status
, и к моему удивлению, git сказалfatal: Not a git repository (or any parent up to mount point ...)
!.gitignore
.git add .
,git commit -m "initial commit"
,git update-ref -D HEAD
, Создать.gitignore
, уведомление , что мерзавец все еще видит файлы, добавленные ранее , что следует игнорировать. Другими словамиgit update-ref -d HEAD
, не вернул меня в состояние до первоначального коммита.git reset --hard HEAD~1
удалит добавленные файлы для всех других коммитов. Очевидно, вопрос заключается в том, как добраться до того же состояния, в котором эта команда работает во всех других случаях. Посмотрите эту суть, чтобы убедиться, чтоgit update-ref -d HEAD
отменяет первоначальную фиксацию, но сохраняет все ранее зафиксированные изменения, добавленные в индекс. Если вы также хотите удалить эти изменения, просто выполните следующееgit reset --hard
. Даже если он неполный, этот ответ действительно лучший, поэтому избегайте его использованияrm -fr .git
(если только вы не знаете, что делаете).Вы можете удалить HEAD и восстановить ваш репозиторий до нового состояния, где вы можете создать новый начальный коммит:
После создания нового коммита, если вы уже отправили его на удаленный сервер, вам нужно будет принудительно принудительно перенести его на удаленный, чтобы перезаписать предыдущий начальный коммит:
источник
Этот вопрос был связан с этим сообщением в блоге, и было предложено альтернативное решение для более новых версий Git:
Это решение предполагает, что:
master
веткеold_master
поэтому я могу использовать это имяОн переименует существующую ветку
old_master
и создаст новую, потерянную, веткуmaster
(как будто она создана для новых репозиториев), после чего вы можете свободно удалятьold_master
... или нет. Вам решать.Примечание. Перемещение или копирование ветки git сохраняет ее reflog (см. Этот код ), а удаление и последующее создание новой ветки приводит к его уничтожению. Поскольку вы хотите вернуться к исходному состоянию без истории, вы, вероятно, захотите удалить ветку, но другие могут захотеть рассмотреть эту небольшую заметку.
источник
На условиях, оговоренных в вопросе:
git init
,git add
операции,git commit
,Если эти предварительные условия выполнены, то самый простой способ отменить начальный коммит:
из каталога, где вы сделали
git init
. Затем вы можете повторить,git init
чтобы воссоздать Git-репозиторий, и добавить дополнения с любыми существенными изменениями, о которых вы сожалели, что не сделали в первый раз, и повторить первоначальный коммит.ОПАСНОСТЬ! Это удаляет каталог Git-репозитория.
Он удаляет каталог репозитория Git навсегда и безвозвратно, если у вас нет резервных копий. Согласно предварительным условиям, вы ничего не хотите хранить в хранилище, поэтому вы ничего не теряете. Все добавленные вами файлы по-прежнему доступны в рабочих каталогах, при условии, что вы еще не изменили их и не удалили их и т. Д. Однако это безопасно, только если в вашем репозитории больше ничего нет. При обстоятельствах, описанных в вопросе «первый раз заархивируйте хранилище, а затем пожалейте об этом», это безопасно. Однако очень часто это небезопасно.
Это также безопасно сделать, чтобы удалить нежелательный клонированный репозиторий; он не наносит ущерба хранилищу, из которого он был клонирован. Он выбрасывает все, что вы сделали в своей копии, но не влияет на исходное хранилище.
Будьте осторожны, но это безопасно и эффективно при выполнении предварительных условий.
Если вы делали с вашим репозиторием другие вещи, которые вы хотите сохранить, то это не тот метод - ваш репозиторий больше не отвечает предварительным условиям для этого.
источник
Ты не можешь Так:
источник
git reset --hard
, так зачем онgit add -A
?Я добавлю, что работало для меня в конце. Мне нужно было удалить начальную фиксацию в репозитории, так как помещенные в карантин данные были помещены не в одну позицию, фиксация уже была отправлена.
Убедитесь, что вы находитесь на правильной ветке.
git checkout master
git update-ref -d HEAD
git commit -m "Initial commit
git push -u origin master
Это смогло решить проблему.
Важный
Это было во внутреннем хранилище, которое не было общедоступным, если ваше хранилище было общедоступным, пожалуйста, предположите, что все, что вам нужно восстановить, уже было удалено кем-то другим.
источник
Я удивляюсь, почему «изменение» не является предложением и было вычеркнуто @damkrat, так как изменение кажется мне просто верным способом наиболее эффективного решения основной проблемы исправления неправильного коммита, поскольку нет цели не иметь первоначального совершить. Как некоторые подчеркивали, вы должны модифицировать «публичную» ветку, как master, только если никто не клонировал ваш репо ...
источник
git reset --hard внести изменения, затем сделатьили
а потом
--force перепишет тот коммит, к которому вы перезагружены на первом шаге.Не делайте этого, потому что вы собираетесь пойти против всей идеи систем VCS и Git в частности. Единственный хороший способ - создать новую и удалить ненужную ветку. Смотрите
git help branch
для информации.источник
Все, что вам нужно сделать, это отменить коммит.
Тогда дави
источник