Я просто добавил неправильный источник в свой проект, используя --force
option.
Можно ли вернуться? Я понимаю, что все предыдущие ветки были перезаписаны с использованием -f
option, поэтому я, возможно, испортил свои предыдущие версии.
git
git-commit
git-push
Дэвид ван Дугтерен
источник
источник
Ответы:
Git обычно ничего не выбрасывает, но восстановление после этого может быть непростым.
Если у вас есть правильный источник, вы можете просто вставить его в пульт с
--force
опцией. Git не удалит никаких веток, если вы ему не скажете. Если вы действительно потеряли коммиты, взгляните на это полезное руководство по восстановлению коммитов . Если вы знаете SHA-1 коммитов, которые вам нужны, то, вероятно, все в порядке.Лучшее, что можно сделать: создать резервную копию всего и посмотреть, что еще находится в вашем локальном репозитории. Если возможно, сделайте то же самое на пульте. Используйте,
git fsck
чтобы узнать, можете ли вы восстановить вещи, и, прежде всего, НЕ запускайтеgit gc
.Прежде всего, никогда не используйте эту
--force
опцию, если вы действительно, действительно серьезно этого не понимаете.источник
git reflog show remotes/origin/master
. Вы должны увидеть там свой толчок; коммит в предыдущей строке находится там, где он был до того, как вы его испортили. Затем вы можете просто отправить эту ревизию (с--force
) в исходную точку и вернуться туда, где вы были!git fetch
редактировалась в течение длительного времени) вы можете отобразить журнал ссылок на стороне GitHub и восстановить!Если вы знаете хеш фиксации, это легко, просто создайте свою ветку заново.
Удалите удаленную ветку:
затем воссоздайте свою ветку с помощью следующих команд:
источник
Решение уже упоминалось здесь
источник
git reflog show remotes/origin/master
если необходим git reflog (как упомянуто @Cascabel выше)Если вы не находитесь в том локальном репо, откуда поступил принудительный толчок, на уровне источника / мастера нет возможности восстановить. Но если вам посчастливилось использовать GitHub или GitHub for Enterprise , вы можете взглянуть на REST API и получить потерянную фиксацию в качестве патча, например:
источник
Другой способ восстановить потерянную фиксацию или даже выяснить, какие коммиты были потеряны, если предыдущее нажатие было получено не из вашего локального репо, - это посмотреть на вашу машину CI.
Если у вас есть задание, которое проверяет главную ветвь после каждой фиксации (или серии последовательных фиксаций), что у вас должно быть, вы можете посмотреть, что тестировалось в последний раз. Это коммит, который вам нужно восстановить.
Машина CI может даже сохранить локальный клон репозитория, из которого вы сможете выполнить это восстановление.
Источник: вероятно, непрерывная доставка: надежные выпуски программного обеспечения с помощью автоматизации сборки, тестирования и развертывания (серия подписей Аддисона-Уэсли (Фаулер))
источник
Да, вы можете восстановить коммиты после
git push -f your_branch
Итак, вы можете:
1-
git reflog
2- вы выбираете Head_Number, хотите ли вы восстановить
git reset –hard HEAD@{HEAD-NUMBER}
3- вы можете увидеть все коммиты в этой главе
git cherry -v branch_name
4- в конце вы должны заставить толкнуть
git push -f branch_name
ИЛИ
1- получить номер SHA от вашего клиента GIT (интерфейс)
2- принудительный толчок
Надеюсь это поможет
источник
Я сделал то же самое, отменив последнее нажатие только для одного файла. Завершился возврат к исходному состоянию репозитория. Я использовал команды git от Линуса, поскольку у меня была локальная копия в Linux. К счастью, эта копия осталась нетронутой.
Все, что я сделал (после судорожного создания еще нескольких копий локального репо):
(он сказал, что origin / master был впереди на 68 коммитов, хорошо ... это были все коммиты, которые я удалил)
И все вернулось так, как было до того, как я сделал сильный толчок. Самая важная вещь, о которой следует помнить, - никогда не выполнять проверку с помощью git. после того, как вы сильно толкнули. Но лучше всего отключить опцию push. Я больше никогда им не пользуюсь. Выучил урок !!
источник
Для людей, находящихся в действительно плохих ситуациях, как я (например, если вы получаете
bad object
ошибки при работеgit reset --hard
):Я написал скрипт под названием treeaver, который в крайнем случае извлекает все ваши файлы из GitHub API. Вот как им пользоваться:
treesaver
сценарий иcd
к нему.SHA
строку дерева, которую вы хотите восстановить, открывhttps://api.github.com/repos/<your_username_or_org>/<repo>/events
.payload
свойстве, соответствующем вашему push-событию, найдитеcommit
то, к чему вы хотите вернуться, и нажмите на негоurl
.commit.tree
скопируйтеtree
файлurl
.python3 main.py <tree_url> <path_to_save_to>
.Например, в моем случае я бы запустил:
Конечно, пиар приветствуется.
источник
Здесь вы можете прочитать решения https://evilmartians.com/chronicles/git-push---force-and-how-to-deal-with-it
Второй мне помог. Я ошибся в этих командах
После этих команд я потерял три коммита. Чтобы восстановить их, я посмотрел на терминал, где я ошибочно сделал git pull, и увидел там вывод вроде
60223bf ... 0b258eb некоторая ветка -> происхождение / некоторая ветка
Второй хеш 0b258eb был именно тем, что мне было нужно. Итак, я взял этот хеш и произвел команду
источник