Я просто побежал git push -f
по ошибке, переписав тем самым удаленную ветку.
Оригинал:
(remote origin:)
branch master -> commit aaaaaaa
branch foo -> commit bbbbbbb
(local)
branch master -> commit ccccccc
branch foo -> commit ddddddd
После git push -f
:
(remote origin:)
branch master -> commit ccccccc
branch foo -> commit ddddddd
В моем локальном хранилище, я работаю на master
ветви, так что я могу восстановить ветвь master
совершить aaaaaaa
, потому что я могу получить совершить aaaaaaa
с git reflog
. Тем не менее, я не мог получить коммит, bbbbbbb
потому что я не тянул раньше git push -f
.
Я пробовал git reflog
в удаленном хранилище, но нет ничего полезного в reflog в пустом хранилище.
Как я могу восстановить ветку foo
обратно для фиксации bbbbbbb
в удаленном хранилище?
(PS Я не знаю фактическую стоимость bbbbbbb
.)
git
file-recovery
Xiè Jìléi
источник
источник
Ответы:
Попробуй это:
Подключитесь к пульту через SSH.
Сделайте резервную копию всего удаленного хранилища.
Если вы знаете хотя бы первые несколько символов
bbbbbbb
, используйтеgit show bbbbbb
и / или,git log bbbbbb
чтобы узнать полный хеш коммита. (Если вам нужен только хеш,git rev-parse bbbbbb
тоже будет работать, но всегда лучше проверить.)Если вы не знаете значение вообще , работать ,
git fsck
и вы должны получить список «оборванных фиксаций». Изучите каждый коммит, используяgit show <hash>
и,git log <hash>
пока не найдете правильный.Обновите ссылки на ветки:
Используйте
git log master
и,git log foo
чтобы убедиться, что вы восстановили правильные ветви.источник
git fsck
.Вероятно, другие услуги также предоставляют такие. Это заставка дня.
источник