2009-07-23 6 views
75

gitで特定のバージョンのファイルをチェックアウトするにはどうしたらいいですか? Gitで特定のバージョンのファイルをチェックアウトするにはどうしたらいいですか?

は、私が言った this mail on the mailing list、見つかった:

$ git checkout HEAD~43 Makefile 
$ git reset Makefile 

をしかし、私は、「HEAD〜43」を見つけるために、私はgit log aFileを行う場合、どのように私は「HEAD〜43を見つけることができますどのように理解していません'私は使うべきですか?

なぜ、そのファイルにgit resetを実行する必要がありますか?それは何をするためのものか?

+0

"gitがをリセット" "Gitチェックアウト" とまったく同じこと。 –

+2

あなたの質問がHEAD〜43の構文(git-rev-parseで文書化されている)に関するものであれば、この問題について質問してください。 "HEAD〜45の意味、ファイルの特定のバージョンを見つける方法" –

+0

http://www.lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- checkout.htmlとhttp://www.lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-reset.html、 "git reset "は正確には動作しません作業ツリーでを触れることなくからインデックスにを元に戻しますが、 『Gitチェックアウト』はからのインデックスを更新し、作業にを更新 『gitのはをリセット』:「Gitチェックアウト」と同じ木。 – yoda

答えて

94

あなたは、ファイルが属するコミット(つまり特定のリビジョン)を知っていますか?その後の操作を行います。

git checkout <commit> <file> 

他のコマンド:

git checkout HEAD~N <file> 

あなたは(私は懐かしのために行う)の範囲背面からのファイルのバージョンを取得したいときのためです。

+0

これは受け入れられる回答でなければなりません。 – TinkerTenorSoftwareGuy

2

HEAD~43は、ファイルのコミット(バージョン)を示します。その代わりに、git logをファイルから実行して得たコミットハッシュを使用することができます。ファイルを欲しいのであれば、git resetを実行する必要はありません。これは、ファイルを現在のHEADに転送する場合にのみ必要です。

15

HEAD~43はハッシュまたはタグを使用することができます。ファイル名とtreeishを別のファイル(--)で区切る必要があります。それ以外の場合はファイル名として扱われます。例えば。

git checkout v0.45 -- filename 
git checkout HEAD^ -- filename 
git checkout 16bb1a4eeaa9 -- filename 
関連する問題