Можно ли восстановить удаленные неотслеживаемые файлы в git? - PullRequest
21 голосов
/ 17 марта 2012

скажем, вчера я сделал некоторые изменения в своей основной ветке, и я забыл добавить, зафиксировать их. а утром я сделал

git reset --hard

возможно ли восстановить удаленные файлы в этой ситуации?

Ответы [ 7 ]

49 голосов
/ 17 марта 2012

Некоторые лучшие IDE отслеживают ваши файлы как локальную историю. Если вы удалили файлы извне (скажем, git reset), вы сможете щелкнуть в своей IDE в родительском каталоге и выбрать «Сравнить с локальной историей».

Я успешно использовал эту функцию в PHPStorm IDE, когда мои неотслеживаемые файлы были уничтожены какой-то утилитой ...

14 голосов
/ 17 марта 2012

Нет ................... Это не так.

5 голосов
/ 17 марта 2012

git reset --hard - очень опасная команда, поэтому будьте осторожны, когда будете использовать ее в следующий раз:)

Если у вас нет коммитов для этих файлов, похоже, у вас нет шансов восстановить их.

В противном случае команда reflog может вам помочь.

4 голосов
/ 23 августа 2017

( Примечание : Похоже, что шаги немного изменились с момента публикации принятого ответа. Но идея остается прежней. )

Чтобы добавить к принятому ответу, я смог восстановить удаленные файлы с помощью Webstorm 2016.

  1. Во-первых, я потерял свой файл, делая принудительную очистку, используя git git clean -f.
  2. Чтобы восстановить его, я зашел в Webstorm и сделал следующие шаги:

    • Перейдите на вкладку Project для своего проекта, щелкните правой кнопкой мыши, чтобы перейти к «Show History» в «Local History». ( Как показано на этом рисунке. )

    • После нажатия «Показать историю» можно увидеть всплывающее окно с «Внешними изменениями -> Вернуть». Нажмите, чтобы вернуть нужные файлы справа. ( Как показано на прилагаемом рисунке. )

    • После выполнения двух вышеуказанных шагов вы должны увидеть, как ваш файл возвращается на вкладку «Проект». Всплывающее окно «Местная история» покажет что-то похожее на эту картинку. Возврат к внешним изменениям Вы получите возможность добавить его в Git.

    • Чтобы отследить его, просто наберите git reset HEAD <filename> из командной строки.

2 голосов
/ 22 августа 2017

git reset --hard не удалит неотслеживаемые файлы. git clean будет, однако.

Однако, если вы git add файлы, не git commit их, а затем запустите git reset --hard эти файлы будут будут потеряны.

Но это нормально, так как их можно восстановить, как показано в этого ответа . (Ну, до следующего git gc).

1 голос
/ 17 марта 2012

Вы не можете получить доступ к предыдущей версии неотслеживаемых удаленных файлов из git, потому что, как правило, они не существуют.Я восстановил бы их из некоторой резервной копии (может быть, это были скрытые файлы резервных копий, оставленные ide / editor?), Или, в качестве альтернативы, я бы избегал слишком много работать с этой файловой системой и начал бы искать инструменты восстановления.

0 голосов
/ 18 апреля 2019

git fsck может вам помочь.

Если вы еще не выполнили сборку мусора, возможно, вам удастся помочь.Получив идентификатор BLOB-объекта, вы можете сказать:

git show {blobId}

...