Доброго дня!
Есть директория .git, лог нормально просматривается, но отсутствуют все файлы.
При выполнении git checkout все файлы помечаются удалёнными.
Вопрос - как воможно восстановить все файлы если на руках только директория .git?
Спасибо.
Git: восстановление файлов из .git
Модератор: Модераторы разделов
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Git: восстановление файлов из .git
Посмотрите в каком коммите всё удалилось
и вернитесь на предыдущий.
Код: Выделить всё
git log --diff-filter=D --summaryUNIX 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.
The more you believe you don't do mistakes, the more bugs are in your code.
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: Git: восстановление файлов из .git
По видимому я не совсем чётко описал, итак...
Собственно хочется восстановить все файлы.
Код: Выделить всё
$ 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
"git reset --hard" синхронизирует рабочий каталог и индекс с репозиторием (содержимым .git), удалив всё ненужное из рабочего каталога, если такое есть. Если же подобное состояние не устраивает, то вывод команды Следопыта поможет найти коммит, удаливший все файлы, после чего можно сделать "git revert ...".
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: Git: восстановление файлов из .git
Вопрос не в том как найти коммит в котором файл был удалён и не в том как откатиться.
У вас есть только директория .git из рабочей копии - необходимо восстановить все файлы из неё.
git checkout, на мой взгляд, должен был бы это сделать, но по факту это не работает.
У вас есть только директория .git из рабочей копии - необходимо восстановить все файлы из неё.
git checkout, на мой взгляд, должен был бы это сделать, но по факту это не работает.
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Git: восстановление файлов из .git
Код: Выделить всё
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.
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
-
sgfault
- Сообщения: 586
- Статус: -
Re: Git: восстановление файлов из .git
Я бы хотел немного дополнить (ну, не то, чтобы дополнить, но так..). У вас не работал вот такой 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.