Как вернуть удаленный файл в GIT
Кто сможет помочь объяснить механику работы с GIT?
- Допустим у нас есть ветка
masterc двумя файлами, c нее сделали копию веткуdev. - удалим один файл с ветки
master, делаемcommit - сделаем
mergeс веткиdevвmasterи разницы в ветках нет,mergeне получается, несмотря на удаленный файл.
Вопрос:
Как правильно вернуть удаленный файл не откатывая commit в котором удалили файл на этапе 2?
Что делать, если файлов несколько, а в ветках есть и другие изменения, который нельзя откатить полностью?
Сэмулировал ситуацию в репозитории
Ответы (3 шт):
Лично я подобные правки делаю руками:
- git checkout коммит-когда-файлы-ещё-были
- Руками копирую файлы в какую-нибудь папку снаружи репозитория
- git checkout master
- Руками копирую файлы в репозиторий
- git add . ; git commit -m '...'
Чтобы приделать к текущей ветки файлы из другой, можно находясь в ветке master выполнить
git checkout dev -- путь/к/файлу/или/папке
при этом текущая ветка останется, а соответствующие файлы возьмутся из указанной ветки. После этого их можно будет закоммитить, но ветки считаться родственными не будут.
Если есть необходимость перезаписать некие изменения, можно в команде выше использовать флаг --force.
если команде checkout передать список файлов, то она восстановит содержимое этих файлов в том виде, как они были зафиксированы в указанном коммите (если не указать ни хэш коммита, ни имя указателя — ветки или метки — то будет использован указатель HEAD).
на случай, если имя какого-нибудь из файлов совпадает с именем какого-нибудь указателя — метки или ветки — лучше отделить их от остальных аргументов с помощью --.
для описанной в вопросе ситуации команда будет выглядеть примерно так:
$ git checkout коммит-когда-файлы-ещё-были -- имя-файла1 имя-файла2 ...