Я потерял все свои скрытые изменения. Как мне их вернуть? - PullRequest
1 голос
/ 08 марта 2020

У меня внезапно произошел сбой питания, так как в моем ноутбуке нет батареи. Как мне восстановить все эти скрытые работы?

enter image description here

Взгляните, что там нет ни одного sh.

1 Ответ

2 голосов
/ 09 марта 2020

Предварительно: начните с создания резервной копии папки .git/ в root вашего хранилища.
Некоторые операции могут запускать сборку мусора git, что может привести к удалению файлов, к которым вы подключитесь sh восстановить, сделав копию папки .git/, вы сможете воспроизвести ваши попытки по желанию.


  1. список тайников хранится вместе с reflogs в файле .git/logs/refs/stash. Убедитесь, что этот файл пуст:

    cat .git/logs/refs/stash
    
  2. run git fsck, чтобы проверить, отображаются ли в нем ошибки о недействительных объектах.

  3. git fsck выведет список объектов, которые все еще хранятся где-то в git, но на которые не ссылаются никакие ветви, теги или журналы.
    Если вы ищете коммиты более конкретно, выполните:

    git fsck | grep commit > dangling-commits.txt
    
  4. Проверьте каждый из висячих коммитов, чтобы увидеть, видите ли вы там свои спрятанные коммиты.
    Например, вы можете запустить:

    cat dangling-commits.txt |\
    # each line should look like : dangling commit <sha>,
    # you want to take the 3rd column
        awk '{ print $3 }' |\
    # for each hash : run 'git log -1'
        xargs -L1 git log -1
    

You Вы увидите, какие из этих коммитов выглядят как спрятанные коммиты: их сообщение должно выглядеть так:

WIP on [branchname]: [short hash] [commit message]

Вы также увидите дату + время их создания.


Если у вас есть нашел некоторые коммиты, которые вы хотите сохранить, отметьте их тегом или веткой, чтобы git не удалил их случайно:

git tag [some name] [commit hash]

# e.g :
git tag backfromthedead/stash0 [commit hash]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...