Если Вы интересуетесь тем, как проект с открытым исходным кодом действительно наполняет как это, можно проверить Терракотовый класс (Os.java), который обрабатывает этот спам здесь:
И Вы видите подобный класс для обработки версий JVM (Vm.java и VmVersion.java) здесь:
Вы можете (с некоторой работой) восстановить состояние файла по последнему «git add <файл> ». Вы можете использовать
$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD
, а затем изучить файлы в каталоге '.git / lost-found / other'.
Прочтите git fsck справочную страницу.
На самом деле, если вы добавили объект в индекс (с помощью git add), для этого состояния объекта создается большой двоичный объект, но нет дерева (и, следовательно, commit), ссылающийся на него. Вот так получается «болтающийся» свободный объектный файл, и если вы запустите git fsck, он покажет вам не имеющий ссылки blob (git gc удалит эти типы объектов, если он запущен).
Из-за этого вы можете используйте журнал ссылок, если он у вас включен, чтобы попытаться восстановить состояние индекса для вашего файла F1, который был добавлен. Если вы вообще не добавляли F2, то, как сказал Грег, git ничего об этом не знает, и вам здесь не повезло.