Gitで1つのファイルの特定のバージョンをチェックアウトするにはどうすればよいですか?


87

gitで1つのファイルの特定のバージョンをチェックアウトするにはどうすればよいですか?

私はこのメールをメーリングリストで見つけました。

$ git checkout HEAD~43 Makefile
$ git reset Makefile

しかし、「HEAD〜43」を見つける方法がわかりません。を実行した場合git log aFile、どの「HEAD〜43」を使用する必要があるかをどのように見つけることができますか?

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


「gitreset <commit> <file>」は、「git checkout <commit> <file>」とまったく同じです。
ヤクブNarębski

2
質問がHEAD〜43構文(git-rev-parseに記載されています)に関するものである場合は、答えを知っている無関係な問題ではなく、この問題について質問してください。「何がHEAD〜45は、平均して、どのようにファイルの特定のバージョンを見つけるために、」
ヤクブNarębski

lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/…およびlt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-よるreset.html、 "git reset <commit> <file>"は "git checkout <commit> <file>"とまったく同じではありません: "git reset <commit> <file>"はインデックスの<file>を元に戻します作業ツリーの<file>に触れずに<commit>から、ただし「git checkout <commit> <file>」は<commit>から<file>のインデックスを更新してから、作業ツリーの<file>を更新します。
ヨーダ2010年

2
下の回答のいずれかの場合は答えたあなたの質問、スタックオーバーフローが動作する方法を、あなたの横にチェックマークをクリックして、答えを「受け入れる」と思います。詳細はこちら。しかし、あなたの質問が答えられた場合に限ります。そうでない場合は、質問に詳細を追加したり、回答に対するコメントを追加して、(まだ)明確でないことを説明することを検討してください。
TJ Crowder 2015年

回答:


104

ファイルが属するコミット(つまり、特定のリビジョン)を知っていますか?次に、次のことを行います。

git checkout <commit> <file>

他のコマンド:

git checkout HEAD~N <file>

ある範囲からファイルのバージョンを取得したい場合に使用します(これは懐かしさのために行います)。


19

HEAD~43ただツリーっぽいので、ハッシュまたはタグを使用できます。ツリーをファイル名から、で区切る必要があり--ます。そうしないと、ファイル名として扱われます。例えば。

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43ファイルのコミット(バージョン)を指します。その代わりgit logに、ファイルに対して実行して得たコミットハッシュを使用できます。ファイルが必要な場合は、ファイルを実行する必要はありませんgit reset。これは、ファイルを現在のHEADにフォワードポートする場合にのみ必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.