Я просто передал неправильный источник моему проекту, используя опцию --force
.
Можно ли вернуться? Я понимаю, что все предыдущие ветки были перезаписаны с помощью опции -f
, поэтому я, возможно, испортил свои предыдущие версии.
Я просто передал неправильный источник моему проекту, используя опцию --force
.
Можно ли вернуться? Я понимаю, что все предыдущие ветки были перезаписаны с помощью опции -f
, поэтому я, возможно, испортил свои предыдущие версии.
Git обычно ничего не выбрасывает, но восстановление от этого может все-таки быть сложным.
Если у вас есть правильный источник, вы можете просто вставить его в пульт с опцией --force
. Git не удалит ветки, если вы не сказали об этом. Если вы действительно потеряли фиксации, посмотрите это полезное руководство по восстановлению коммитов. Если вы знаете SHA-1 коммитов, которые вы хотите, вы, вероятно, все в порядке.
Лучше всего сделать: запустите все и посмотрите, что еще находится в вашем локальном репозитории. Сделайте то же самое на пульте дистанционного управления, если это возможно. Используйте git fsck
, чтобы узнать, можете ли вы восстановить что-то, и, прежде всего, НЕ запускать git gc
.
Прежде всего, никогда не используйте параметр --force
, если вы действительно этого не понимаете.
Если вы знаете хеш фиксации, просто, просто заново создайте ветку.
5794458...b459f069 master -> master (forced update)
Удалите удаленную ветку:
git push origin :master
затем заново создайте ветку со следующими командами:
git checkout 5794458
git branch master
git push origin master
Решение уже упоминалось здесь
# work on local master
git checkout master
# reset to the previous state of origin/master, as recorded by reflog
git reset --hard origin/[email protected]{1}
# at this point verify that this is indeed the desired commit.
# (if necessary, use git reflog to find the right one, and
# git reset --hard to that one)
# finally, push the master branch (and only the master branch) to the server
git push -f origin master
Я сделал то же самое, отменив последнее нажатие только для одного файла. Закончилось возвращение к исходному состоянию репозитория. Я использовал команды git от Linus, поскольку у меня была локальная копия в Linux. К счастью, этот экземпляр остался неповрежденным.
Все, что я делал, было (после отчаянного создания нескольких копий локального репо):
git add .
git status
(он сказал, что происхождение/мастер впереди - 68 коммитов, штраф... все это были те коммиты, которые я удалил)
git remote set-url origin <GIT_SSH_URL>
git push
И все восстановилось так, как было до того, как я сделал сильный толчок. Самая важная вещь, которую нужно помнить, - никогда не делать проверку git. после того, как вы силой толкнули. Но лучше всего отключить опцию push. Я никогда больше его не использую. Узнал мой урок!