特定のファイルの特定のバージョンを(stdout にダンプするか、 または にダンプして) 表示するコマンドが Git にあり$PAGERますか?$EDITOR
10 に答える
git showリポジトリのルートからのパス (./または../相対パス)で使用できます。
$ git show REVISION:path/to/file
実際のリビジョンに置き換えREVISIONます (Git コミット SHA、タグ名、ブランチ名、相対コミット名、または Git でコミットを識別するその他の方法)
たとえば、<repository-root>/src/main.c4 コミット前のファイルのバージョンを表示するには、次を使用します。
$ git show HEAD~4:src/main.c
Git for Windows では、現在のディレクトリからの相対パスであってもスラッシュが必要です。詳細については、 のマニュアル ページを参照してくださいgit-show。
コミットが過去 90 日以内に発生した場合、日付でこれを行うと次のようになります。
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt
HEAD@{2013-02-25}このリポジトリの「2013-02-25 に HEAD があった場所」( reflogを使用)を意味することに注意してください。
これは重要!つまり、デフォルトでは、このメソッドは過去 90 日以内の履歴に対してのみ機能します。それ以外の場合は、次のようにする必要があります。
git show $(git rev-list -1 --before="2013-02-26" HEAD):./fileInCurrentDirectory.txt
GUI が好きなら、gitk を使用できます。
gitk を次のように起動します。
gitk /path/to/file画面の上部で、説明や日付などでリビジョンを選択します。デフォルトでは、画面の下部にそのリビジョンの差分が表示されます (「パッチ」ラジオ ボタンに対応)。
選択したリビジョンのファイルを表示するには:
- 「ツリー」ラジオボタンをクリックします。これにより、そのリビジョンのファイル ツリーのルートが表示されます。
- ファイルにドリルダウンします。
コマンドcommit hashで a (しばしば とも呼ばれますcommit ID) を指定することもできます。git show
手短に
git show <commitHash>:/path/to/file
一歩一歩
- 特定のファイルのすべての変更のログを表示します
git log /path/to/file - 表示される変更のリストでは、(06c98... はコミット ハッシュ)
commit hashなどを示します。commit 06c98... - コピー
commit hash - 手順 3 のと手順 1 の
git show <commitHash>:/path/to/fileを使用してコマンドを実行します。commit hashpath/to/file
注:相対パスを指定する場合は、 を追加することが./重要と思われgit show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.htmlます。
Jim Hunzikerの回答に加えて、
リビジョンからファイルを次のようにエクスポートできます。
git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt
お役に立てれば :)
ファイルの古いリビジョンとの違いをすばやく確認するには:
git show -1 filename.txt> ファイルの最後のリビジョンと比較するには
git show -2 filename.txt> 2 番目の最後のリビジョンと比較する
git show -3 fielname.txt> 最後の 3 番目の最後のリビジョンと比較するには
git log -pコミット ログだけでなく、各コミットの差分も表示されます (マージ コミットを除く)。次に、 を押し/てファイル名を入力し、 を押しenterます。nまたはを押しpて、次/前の出現箇所に移動します。これにより、ファイルの変更だけでなく、コミット情報も表示されます。
特定のリビジョンから複数のファイルを取得するヘルパー
マージの競合を解決しようとする場合、このヘルパーは非常に便利です:
#!/usr/bin/env python3
import argparse
import os
import subprocess
parser = argparse.ArgumentParser()
parser.add_argument('revision')
parser.add_argument('files', nargs='+')
args = parser.parse_args()
toplevel = subprocess.check_output(['git', 'rev-parse', '--show-toplevel']).rstrip().decode()
for path in args.files:
file_relative = os.path.relpath(os.path.abspath(path), toplevel)
base, ext = os.path.splitext(path)
new_path = base + '.old' + ext
with open(new_path, 'w') as f:
subprocess.call(['git', 'show', '{}:./{}'.format(args.revision, path)], stdout=f)
使用法:
git-show-save other-branch file1.c path/to/file2.cpp
結果: 以下には、ファイルの代替バージョンが含まれています。
file1.old.c
path/to/file2.old.cpp
このように、ファイル拡張子を保持することで、エディターが文句を言わず、新しいファイルのすぐ隣にある古いファイルを簡単に見つけることができます。