Git: восстановление файлов из .git

IDE, VCS и прочее

Модератор: Модераторы разделов

Ответить
IMB
Сообщения: 2561
ОС: Debian

Git: восстановление файлов из .git

Сообщение IMB »

Доброго дня!
Есть директория .git, лог нормально просматривается, но отсутствуют все файлы.
При выполнении git checkout все файлы помечаются удалёнными.
Вопрос - как воможно восстановить все файлы если на руках только директория .git?
Спасибо.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Git: восстановление файлов из .git

Сообщение SLEDopit »

Посмотрите в каком коммите всё удалилось

Код: Выделить всё

git log --diff-filter=D --summary
и вернитесь на предыдущий.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
IMB
Сообщения: 2561
ОС: Debian

Re: Git: восстановление файлов из .git

Сообщение IMB »

По видимому я не совсем чётко описал, итак...

Код: Выделить всё

$ ls -aF
./  ../  .git/

$ git log --pretty=format:"%h%x09%s"
51bea5d Вынос вывода сообщений о установке параметров в отдельную функцию
d87efc0 Полуавтоматические конфигурирование драйвера OV2715
.............

$ git checkout
D       .gitignore
D       AX88179/.gitignore
D       AX88179/Makefile
..........

Собственно хочется восстановить все файлы.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Git: восстановление файлов из .git

Сообщение serzh-z »

IMB писал(а):
14.05.2013 12:35
Собственно хочется восстановить все файлы.
"git reset --hard" синхронизирует рабочий каталог и индекс с репозиторием (содержимым .git), удалив всё ненужное из рабочего каталога, если такое есть. Если же подобное состояние не устраивает, то вывод команды Следопыта поможет найти коммит, удаливший все файлы, после чего можно сделать "git revert ...".
Спасибо сказали:
IMB
Сообщения: 2561
ОС: Debian

Re: Git: восстановление файлов из .git

Сообщение IMB »

Вопрос не в том как найти коммит в котором файл был удалён и не в том как откатиться.
У вас есть только директория .git из рабочей копии - необходимо восстановить все файлы из неё.
git checkout, на мой взгляд, должен был бы это сделать, но по факту это не работает.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Git: восстановление файлов из .git

Сообщение SLEDopit »

Код: Выделить всё

git ls-files -d | xargs git checkout --
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -
Контактная информация:

Re: Git: восстановление файлов из .git

Сообщение sgfault »

IMB писал(а):
14.05.2013 13:38
git checkout, на мой взгляд, должен был бы это сделать, но по факту это не работает.

Я бы хотел немного дополнить (ну, не то, чтобы дополнить, но так..). У вас не работал вот такой checkout:

Код: Выделить всё

git checkout BRANCH

То, что предложил Следопыт, это "другой" checkout:

Код: Выделить всё

git checkout -- path


Те, используя последнюю форму, просто восстановить все файлы с какого коммита, можно и так

Код: Выделить всё

git checkout -- '*'

И, как я понимаю, в вашем случае, когда вы делаете checkout всех файлов с HEAD, это то же самое, что и предложенный serzh-z-ем `reset --hard`.

Upd. Да, и еще. Видимо, `checkout BRANCH` не работал у вас потому, что пустой working tree, отличался от HEAD. Это значит, что checkout без опции '-f' его обновляеть не будет. Собственно, вот

Код: Выделить всё

GIT-CHECKOUT(1)
...
       -f, --force
           When switching branches, proceed even if the index or the working tree
           differs from HEAD. This is used to throw away local changes.

Ну и тут объяснение stackoverflow.com/whats-the-difference-between-git-reset-and-git-checkout.
Спасибо сказали:
Ответить