git-checkout ファイルの古いリビジョンを新しい名前でチェックアウトする 質問する

git-checkout ファイルの古いリビジョンを新しい名前でチェックアウトする 質問する

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私が期待しているのは、これが実行できるの変種です。


更新: Mac OSX 10.5.7 で Git を使用しています

prompt> git --version
git version 1.6.0.4
prompt> 

更新2: Jakub Narębski の回答は次のとおりです:

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

UPDATE3: 特定の改訂に対するKarmiの回答:

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

ベストアンサー1

そのために使用できるものgit show:

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

(と:の間にコロン[ ]があることに注意してください。)構文はHEAD^main.cpp<revision>:<path>git rev-parseman ページの「リビジョンの指定」セクションの最後のポイントの次に:

<rev>:<path>例えばHEAD:README、、:READMEmaster:./README

パスが続くサフィックスは:、コロンより前の部分で指定されたツリー状のオブジェクト内の指定されたパスにある BLOB またはツリーに名前を付けます。:path(コロンより前の部分は空) は、次に説明する構文の特殊なケースです。指定されたパスのインデックスに記録されたコンテンツ。 または で始まるパスは、./現在../の作業ディレクトリに対する相対パスです。指定されたパスは、作業ツリーのルート ディレクトリに対する相対パスに変換されます。これは、作業ツリーと同じツリー構造を持つコミットまたはツリーから BLOB またはツリーをアドレス指定する場合に最も便利です。

ここで、これはプロジェクトの最上位ディレクトリ、つまりディレクトリを含むディレクトリに対する完全な相対パスであることに注意してください。(または、より正確には、「<revision><path> 」に対する相対パスです。これは一般に、任意の<tree-ish>、つまりツリーを表すものになります。).git/

現在のディレクトリからの相対パスを使用する場合は、./<path>構文 (または../path現在のディレクトリから上へ移動) を使用する必要があります。

2015-01-15編集:相対パス構文に関する情報を追加しました


git cat-fileほとんどの場合、低レベル (配管)コマンドを使用して同じ出力を得ることができます。

git cat-file blob HEAD^:main.cpp > old_main.cpp

おすすめ記事