Если файл был поставлен (он похож на ваш), то будет создан снимок, это база данных Git. Мы можем вернуть его!
Git хранит моментальные снимки внутри в направлении .git/objects/
в вашем репозитории. Каждый объект хранится в файле с именем для его хэша, разделенном на каталоги на первые 2 символа. Снимки будут существовать здесь, пока они не будут упакованы в файлы в .git/objects/pack/
(что не произойдет с моментальным снимком, который никогда не был частью фиксации) или собранным мусором (что в конечном итоге произойдет с вашим отсутствующим файлом). Трудная часть будет определять, какой именно объект.
Чтобы найти объект, запустить
ls -lRt .git/objects
, чтобы получить список всех объектов, отсортированных по времени последнего изменения. Вот что мой гипотетический хранилище выглядит следующим образом:
$ ls -lRt .git/objects
.git/objects/22:
total 4
-r--r--r-- 1 peter peter 17 Sep 1 11:18 3b7836fb19fdf64ba2d3cd6173c6a283141f78
.git/objects/f7:
total 4
-r--r--r-- 1 peter peter 17 Sep 1 11:09 0f10e4db19068f79bc43844b49f3eece45c4e8
.git/objects/54:
total 4
-r--r--r-- 1 peter peter 51 Sep 1 11:08 3b9bebdc6bd5c4b22136034a95dd097a57d3dd
.git/objects/e8:
total 4
-r--r--r-- 1 peter peter 134 Sep 1 11:08 e8417380c89509ec1e5b67c15469547a4489c2
.git/objects/e6:
total 4
-r--r--r-- 1 peter peter 15 Sep 1 11:08 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
Run
git cat-file -p <hash>
на объектах кандидатов, пока не найдете тот, который вы недостающее. Не забудьте добавить 2 символа из имени каталога в хэш. В моем случае, если меня интересует файл от 11:09
git cat-file -p f70f10
Счастливая охота.
К сожалению, мне кажется, что вы действительно потеряли эти изменения. Я не являюсь пользователем «sourcetree», но я бы ожидал «Отменить», чтобы отменить изменения. Теперь, если вы включили какую-то «локальную историю» в вашу среду IDE, которая работает независимо от Git, тогда вы сможете получить свои изменения таким образом. Я знаю, что Intellij IDEA имеет значение по умолчанию. Не уверен насчет Eclipse или других инструментов. Если у вас нет этой функции, вы должны изучить ее. Очень аккуратно иметь дополнительный уровень безопасности - он также намного более мелкозернистый, чем git. – Steinar
Ничего себе, это действительно страшно! Я начал использовать git, чтобы избежать потери данных вначале, и здесь я смотрю на отчаянную ситуацию! BTW Я использую Netbeans (в основном настройки по умолчанию), что я могу восстановить свою работу оттуда? – Community
** Какой выбор я должен использовать вместо этого, чтобы удалить один файл из фиксации? ** – Community