git-checkout старая ревизия файла под новым именем - PullRequest
233 голосов
/ 20 мая 2009

В моем редакторе открыт файл "main.cpp".

Я хочу увидеть предыдущую версию "main.cpp" и в редакторе.

То, как я это делаю сейчас, выглядит следующим образом.

close "main.cpp" in the editor

prompt> mv main.cpp tmp
prompt> git checkout HEAD^ main.cpp
prompt> mv main.cpp old_main.cpp
prompt> mv tmp main.cpp
prompt>

open "main.cpp" and "old_main.cpp" in the editor

Можно ли это упростить, поэтому мне не нужно закрывать "main.cpp" в редакторе?

Я надеюсь, что это вариант git-checkout, который может это сделать.


ОБНОВЛЕНИЕ: я использую git на Mac OSX 10.5.7

prompt> git --version
git version 1.6.0.4
prompt> 

ОБНОВЛЕНИЕ 2: Якуб Наренбский ответ:

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp
prompt>

ОБНОВЛЕНИЕ 3: ответ Карми, для конкретной ревизии:

prompt> git show 4c274dd91dc:higgs/Higgs.xcodeproj/project.pbxproj > old_project.pbxproj
prompt> 

Ответы [ 2 ]

269 голосов
/ 20 мая 2009

Для этого вы можете использовать «git show»:

prompt> git show HEAD^:main.cpp > old_main.cpp

(Обратите внимание, что между HEAD^ и main.cpp стоит символ двоеточия [:].) Синтаксис <revision>:<path> описан в справочной странице git rev-parse , рядом с последней точкой в раздел «Указание ревизий»:

  • : , например, ГОЛОВА: README,: README, мастер: ./ README

    Суффикс :, за которым следует путь к имени большого двоичного объекта или дерева по указанному пути в объекте tree-ish, названном частью перед двоеточием. :path (с пустой частью перед двоеточием) является частным случаем синтаксиса, описанного ниже: содержимое записывается в индекс по заданному пути.

    Путь, начинающийся с ./ или ../, относится к текущему рабочему каталогу. Указанный путь будет преобразован в относительный к корневому каталогу рабочего дерева. Это наиболее полезно для обращения к BLOB-объекту или дереву из коммита или дерева, которое имеет ту же структуру дерева, что и рабочее дерево.

Обратите внимание, что <path> здесь - это FULL путь относительно верхнего каталога вашего проекта, то есть каталога с каталогом .git/. (Или, если быть более точным, "" (который обычно может быть любым , то есть чем-то, что представляет дерево))

Если вы хотите использовать путь относительно текущего каталога, вам нужно использовать синтаксис ./<path> (или ../path для перехода из текущего каталога).

Редактировать 2015-01-15: добавлена ​​информация о синтаксисе относительного пути


В большинстве случаев вы можете получить один и тот же вывод, используя низкоуровневое (слесарное дело) git cat-file команду:

prompt> git cat-file blob HEAD^:main.cpp > old_main.cpp
21 голосов
/ 21 мая 2009

Просто добавьте к ответу Якуба: вам даже не нужно перенаправлять вывод в файл с >, если вы заинтересованы только в просмотре содержимого файла в терминале. Вы можете просто запустить $ git show 58a3db6:path/to/your/file.txt.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...