2009-05-20 11 views
188

私のファイルには "main.cpp"というファイルがあります。git-checkout新しい名前でファイルの古いリビジョン

私は以前の改訂版 "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の亜種です。


UPDATE:MAC OSX 10.5.7

prompt> git --version 
git version 1.6.0.4 
prompt> 

のGitを使用してイムがアップデート2:ヤクブNarębskiの答えは次のとおりです。


Update3と

prompt> git show HEAD^:dir1/dir2/dir3/main.cpp > old_main.cpp 
prompt> 
:Karmiの答え、特定のリビジョン:

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

どのエディターを使用しますか?おそらく、プラグイン/アドオン/モジュールがGitのサポートを追加していますか? –

+0

私はtextmateを使用しています。それはいくつかのgitのサポートがありますが、私はそれを行うことができればチェックしていない。 – neoneye

+0

Textmateにはgit bundleがあります:http://github.com/timcharper/git-tmbundle(git wikiのInterfacesFrontendsAndToolsページ:http://git.or.cz/gitwiki/) –

答えて

211

あなたはそのための "gitのショー" を使用することができます。

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

(コロンHEAD^とmain.cpp`間の ':' 文字があることに注意してください。)>」<リビジョン:

<パス>は指定リビジョン 『セクション」の構文は次の最後のポイントへgit rev-parse manページに記載されています』
  • <REV>:<パス>、例えばHEAD:README、:README、マスター:./ README

    コロンの前の部分で指定されたツリーっぽいオブジェクトの指定されたパスのパス名ブロブや木が続く接尾::path(コロンの前に空の部分がある)は、次に説明する構文の特殊なケースです。指定されたパスのインデックスに記録されたコンテンツ。

    ./または../で始まるパスは、現在の作業ディレクトリからの相対パスです。指定されたパスは作業ツリーのルートディレクトリを基準にして変換されます。これは、作業ツリーと同じツリー構造を持つコミットまたはツリーからBLOBまたはツリーを処理する場合に最も便利です。"<パス>は" ここにあなたのプロジェクトのトップディレクトリFULLの相対パス、.git/ディレクトリを持つ、すなわちディレクトリであることを

注意。あなたが現在までの相対パスを使用する場合は

(または「<改正>」(一般的には、ツリーを表す任意の<ツリーっぽい>、すなわち何かあってもよい)に、より正確には)ディレクトリ "。/ <パス>"(または "../<パス>"を現在のディレクトリから上に移動する)を使用する必要があります。

編集2015年1月15日:

git cat-fileコマンドあなたは低レベル(配管)を使用して、ほとんどの場合、同じ出力を得ることができ、相対パス構文


についての情報を追加しました

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

私は完全なコピーに興味がありますが、git-showは私に違いを示しています。--prettyオプション.. プロンプト> git show --pretty = fuller HEAD^main.cpp これは解決しませんでした。 – neoneye

+4

"git show HEAD^main.cpp"(HEAD ^とmain.cppの間にスペースがあります) –

+0

コロンが付いているので、このエラーが表示されるので、コロンは間違いだと思っていました。はい、そうです。 "git show HEAD ^:main.cpp"と違います(HEAD ^とmain.cppの間に_colon_ ':'コロンのようなコロンが行く方法ですが、どうすれば解決できますか? プロンプト> git show HEAD ^:main.cpp fatal:あいまいな引数 'HEAD ^:main.cpp':不明なリビジョンまたはパスいいえ作業ツリーの中のt。 リビジョンからパスを区切るには ' - 'を使用してください prompt> – neoneye

19

Jakubの回答に追加するだけで、ファイルをスキミングすることに興味がある場合は、出力を>のファイルにリダイレクトする必要はありません端末内のコンテンツ。 $ git show 58a3db6:path/to/your/file.txtを実行するだけです。

+1

私は 'git show 58a3db6:path/to/your/file.txt'コマンドでスラッシュを始める必要はないと思います。 –

0

git showコマンドが(1.6.4.msysgitを使用して)私のどちらに対しても機能しませんでした。 Windowsのパス区切り文字と何か関係がありますか?

私はちょうどダウンロードし、QGitを使用して終了....はるかに簡単に!

+1

私はcygwin gitに切り替えましたが、しばらくmsysgitしていました。 checkout HEAD^'は、典型的なWindowsのcmdセッションでは'^'が特別な意味を持っているため動作しません。しかし、 'git checkout" HEAD^"'はうまくいきましたので、msysgitの 'git cat-file blob" HEAD ^:main.cpp "のようなことができます。 – MatrixFrog

+1

'HEAD ^'は 'HEAD〜1'のエイリアスです。後者はWindowsで動作します。 – Perleone

+0

HEAD〜を使うことができます。 – JoelFan

関連する問題