У меня есть старый фиксат, который я сделал несколько недель назад. Я хочу восстановить только один файл из этого коммита. Что мне делать?
Восстановить файл из старого фиксации в git
Ответ 1
git checkout '[email protected]{7 days ago}' -- path/to/file.txt
Это не изменит HEAD, он просто перезапишет локальный файл path/to/file.txt
См. man git -rev-parse для получения возможных спецификаций пересмотра (конечно, простой хеш (например, dd9bacb
) будет делать красиво)
Не забудьте зафиксировать изменение (после обзора...)
Ответ 2
- Проверьте файл с вашего старого фиксатора через
git checkout [Revision_Key] -- path/to/file
. - Добавить, зафиксировать, нажимать соответственно.
Ответ 3
Мне нужно было восстановить недавний файл, записанный в git. Так что, просто чтобы повторить и дать другую точку зрения, вам нужно сделать это, выполнив следующие два шага:
Git Log -3
Это показывает три последних коммитов. Прочитайте комментарии и имя автора, чтобы определить, какую именно версию вы хотите. Запишите этот длинный идентификатор фиксации (т.е. b6b94f2c19c456336d60b9409fb1e373036d3d71) для нужной версии фиксации.git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
Передайте идентификатор фиксации И имя файла, который вы хотите восстановить. Убедитесь, что у вас есть пробел до и после двойного дефиса.
Есть много других способов сделать это. Но этот самый простой, который я помню. Надеюсь, это поможет.
ПРИМЕЧАНИЕ. Если вы находитесь внутри пути/папки вашего проекта, нет необходимости вводить полный путь к файлу в команде извлечения.
Ответ 4
Во всех ответах упоминается git checkout <tree-ish> -- <pathspec>
. Начиная с git v2.23.0, появился новый метод git restore, который должен предполагать часть того, за что git checkout
был ответственен. Просмотрите основные изменения в блоге github.
Поведение этой команды по умолчанию заключается в восстановлении состояния рабочего дерева с содержимым, полученным из параметра source
(который в вашем случае будет хешем коммита).
Предполагая, что хэш коммита равен abcdef
, команда будет выглядеть следующим образом:
git restore --source=abcdef file_name
который (по умолчанию) помещает его в рабочее дерево. Если вы хотите поместить изменение непосредственно в индекс, чтобы его можно было сразу зафиксировать:
git restore --source=abcdef --worktree --staged file_name
или с короткими именами опций:
git restore -s=abcdef -W -S file_name