У меня есть старый коммит, который я сделал несколько недель назад. Я хочу восстановить только один файл из этого коммита. Что мне делать?
git
git-checkout
Варун Ахар
источник
источник
Ответы:
Это не изменит HEAD, оно просто перезапишет локальный файл
path/to/file.txt
Смотрите man git-rev-parse для возможных спецификаций ревизий (конечно, простой хеш (вроде бы
dd9bacb
) подойдет)Не забудьте зафиксировать изменение (после проверки ...)
источник
revision-specification
так это то , что просили ОП :)shacommit~1
(ex:),git checkout 0f4bbdcd~1 -- path/to/file.txt
чтобы получить коммит непосредственно перед этим.git checkout [Revision_Key] -- path/to/file
.источник
git checkout
может обрабатывать отдельные файлы (см. ответ по sehe), не нужно копировать и вставлять.HEAD
,ORIG_HEAD
или любой из них в сочетании с^
/~
/@
-style нотации.Мне нужно было восстановить недавний файл, записанный в git. Так что просто для того, чтобы повторить и дать другую точку зрения, вам нужно сделать это, выполнив следующие два шага:
git log -3
Это показывает три последних коммитов. Прочитайте комментарии и имя автора, чтобы определить, какую именно версию вы хотите. Запишите этот длинный идентификатор (например
b6b94f2c19c456336d60b9409fb1e373036d3d71
) для версии коммита, которую вы хотите.git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 -- myfile.java
Передайте идентификатор фиксации И имя файла, который вы хотите восстановить. Убедитесь, что у вас есть пробел до и после двойного дефиса.
Есть много других способов сделать это, но это самый простой, который я могу вспомнить.
ПРИМЕЧАНИЕ. Если вы находитесь внутри пути / папки вашего проекта, то нет необходимости вводить полный путь к файлу в команде извлечения.
источник
Все ответы упоминаются
git checkout <tree-ish> -- <pathspec>
. Начиная с git v2.23.0, появился новый метод восстановления git, который должен принять на себя частьgit checkout
ответственности. Смотрите основные изменения в блоге GitHub .Поведение этой команды по умолчанию заключается в восстановлении состояния рабочего дерева с содержимым, полученным из
source
параметра (который в вашем случае будет хешем коммита).Предполагая, что коммит хеш это
abcdef
команда будет выглядеть так:который (по умолчанию) помещает его в рабочее дерево. Если вы хотите поместить изменение непосредственно в индекс, чтобы его можно было сразу зафиксировать:
или с короткими именами опций:
источник