Ответ 1
Вы можете использовать "git show" для этого:
prompt> git show HEAD^:main.cpp > old_main.cpp
(Обратите внимание, что между HEAD^
и main.cpp` есть символ двоеточия :
'.) "<version> : <path> " синтаксис описан в git rev-parse manpage, рядом с последним в разделе "Указание ревизий":
- <rev> : < путь > , например. HEAD: README,: README, master:./README
Суффикс
:
, за которым следует путь, называет пучок или дерево по заданному пути в древовидном объекте, названном частью перед двоеточием.:path
(с пустой частью перед двоеточием) - это особый случай описанного ниже синтаксиса: контент, записанный в индекс по данному пути.Путь, начинающийся с
./
или../
, относится к текущему рабочему каталогу. Данный путь будет преобразован относительно исходного корневого каталога деревьев. Это наиболее полезно для обращения к блобу или дереву из фиксации или дерева, которое имеет ту же структуру дерева, что и рабочее дерево.
Обратите внимание, что "<path> " здесь находится FULL путь к верхней директории вашего проекта, то есть каталог с каталогом .git/
. (Или, точнее, "<revision> " (который обычно может быть любым < tree-ish > , т.е. то, что представляет дерево))
Если вы хотите использовать путь относительно текущего каталога, вам нужно использовать "./<path> " синтаксис (или "../<path> " для перехода из текущего каталога).
Изменить 2015-01-15: добавлена информация об относительном синтаксисе пути
В большинстве случаев вы можете получить тот же результат, используя команду low-level (plumbing) git cat-file
:
prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp