2009-07-28 5 views
3

Вопрос относится к вопросу "How to restore Git after fatal file system error?", но для одного файла.Восстановление файла из Git?

Мне нужно, чтобы добраться до последнего состояния 2009-07-27 23:58, где я нужен файл:

/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml 

Как я могу восстановить файл после аварии?

ADDED: Где я могу найти файл? Что они должны делать?

кончик Грэма

$git checkout 63c6844fded9cfcdee14c9330be82557046b3e56 HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 

наконечник Уильяма

git checkout bee6763b55cf8259438aa575cedbb09d1d02b96a HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 
+0

Typo в ответе исправлено. Это должно быть --since = '...' (добавить a '=') –

ответ

2

Иногда я удаляю файл или каталог в моем git local, и я хочу восстановить именно этот файл. я запускаю следующую команду:

git checkout -- filenameOrDirectory 

Обратите внимание на промежутки между ними.

+0

Итак, без и с -, файл/каталог восстанавливается с последнего фиксации. –

+1

Да, но его взятие из вашего локального хранилища.Например, если вы недавно «git pull», а затем изменили один конкретный файл, то вы решили, что хотите восстановить его до такой степени, когда вы последний раз выполняли git pull, вы можете использовать эту команду. Мне это очень удобно. Он восстанавливает файлы до последнего состояния git pull, которое действительно является вашим местным состоянием репо. Можешь попробовать. Удалите любой файл или каталог, а затем запустите его, он должен быть восстановлен. – j2emanue

4

Если вам нужно, чтобы получить один файл из коммита, который находится в вашем хранилище, то мерзавец контроль будет делать для тебя. В частности:

git checkout <sha> <filename> 

загрузит файл < имя файла> от совершения < ша> в текущей рабочей копии. может быть любой ссылкой на любую фиксацию, поэтому это может быть имя филиала, имя тега, HEAD ^^^^ или что-то еще подобное, что вы хотите ...

+0

«Не только одна диаграмма классов» - это сообщение журнала для этой фиксации, а не идентификатор фиксации. Вам нужен какой-то способ ссылки на фиксацию - например, идентификатор SHA1 для фиксации. git log должен быть в состоянии дать вам это. – Graham

+0

Где я должен запускать команду? Я обновил ошибку. –

+1

Перейдите на верхний уровень вашего каталога git. Запустите «git ls-tree -r -name-only master», чтобы проверить, находится ли файл, который вы хотите восстановить, в «master» (из включенного скриншота это выглядит как состояние 2009-07-27 23:58). Запустите 'git checkout master - ', где '' находится у него на выходе git-ls-tree –

1

У вас есть неповрежденная копия хранилище в любом месте? Если это так, потяните оттуда в свой рабочий каталог, а затем проверьте файл. Вы можете сделать:

 
git log --since='2009-07-27 23:58' --pretty=oneline -n 1 

получить хеш вы хотите, и затем получить файл через:

 
git checkout <file> <hash> 

Если у вас нет неповрежденных рабочих копий репозитория, вы можете попробовать «GIT FSCK», но ваш шанс на успех небольшой или нулевой, если файлы были потеряны.

+0

Я добавил ошибки из вашей команды в вопрос. –

Смежные вопросы