Как я могу оправиться от херунинга git push -f origin master? - программирование
Подтвердить что ты не робот

Как я могу оправиться от херунинга git push -f origin master?

Я просто передал неправильный источник моему проекту, используя опцию --force.

Можно ли вернуться? Я понимаю, что все предыдущие ветки были перезаписаны с помощью опции -f, поэтому я, возможно, испортил свои предыдущие версии.

4b9b3361

Ответ 1

Git обычно ничего не выбрасывает, но восстановление от этого может все-таки быть сложным.

Если у вас есть правильный источник, вы можете просто вставить его в пульт с опцией --force. Git не удалит ветки, если вы не сказали об этом. Если вы действительно потеряли фиксации, посмотрите это полезное руководство по восстановлению коммитов. Если вы знаете SHA-1 коммитов, которые вы хотите, вы, вероятно, все в порядке.

Лучше всего сделать: запустите все и посмотрите, что еще находится в вашем локальном репозитории. Сделайте то же самое на пульте дистанционного управления, если это возможно. Используйте git fsck, чтобы узнать, можете ли вы восстановить что-то, и, прежде всего, НЕ запускать git gc.

Прежде всего, никогда не используйте параметр --force, если вы действительно этого не понимаете.

Ответ 2

Если вы знаете хеш фиксации, просто, просто заново создайте ветку.

5794458...b459f069 master -> master (forced update)

Удалите удаленную ветку:

git push origin :master

затем заново создайте ветку со следующими командами:

git checkout 5794458
git branch master
git push origin master

Ответ 3

Решение уже упоминалось здесь

# 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

Ответ 4

Я сделал то же самое, отменив последнее нажатие только для одного файла. Закончилось возвращение к исходному состоянию репозитория. Я использовал команды git от Linus, поскольку у меня была локальная копия в Linux. К счастью, этот экземпляр остался неповрежденным.

Все, что я делал, было (после отчаянного создания нескольких копий локального репо):

git add .
git status

(он сказал, что происхождение/мастер впереди - 68 коммитов, штраф... все это были те коммиты, которые я удалил)

git remote set-url origin <GIT_SSH_URL>
git push

И все восстановилось так, как было до того, как я сделал сильный толчок. Самая важная вещь, которую нужно помнить, - никогда не делать проверку git. после того, как вы силой толкнули. Но лучше всего отключить опцию push. Я никогда больше его не использую. Узнал мой урок!