1749

特定のファイルの特定のバージョンを(stdout にダンプするか、 または にダンプして) 表示するコマンドが Git にあり$PAGERますか?$EDITOR

4

10 に答える 10

1991

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

于 2008-12-03T19:46:52.793 に答える
287

コミットが過去 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
于 2013-03-07T17:05:24.470 に答える
127

GUI が好きなら、gitk を使用できます。

  1. gitk を次のように起動します。

    gitk /path/to/file
    
  2. 画面の上部で、説明や日付などでリビジョンを選択します。デフォルトでは、画面の下部にそのリビジョンの差分が表示されます (「パッチ」ラジオ ボタンに対応)。

  3. 選択したリビジョンのファイルを表示するには:

    • 「ツリー」ラジオボタンをクリックします。これにより、そのリビジョンのファイル ツリーのルートが表示されます。
    • ファイルにドリルダウンします。
于 2012-12-19T18:21:57.967 に答える
103

コマンドcommit hashで a (しばしば とも呼ばれますcommit ID) を指定することもできます。git show


手短に

git show <commitHash>:/path/to/file


一歩一歩

  1. 特定のファイルのすべての変更のログを表示しますgit log /path/to/file
  2. 表示される変更のリストでは、(06c98... はコミット ハッシュ)commit hashなどを示します。commit 06c98...
  3. コピーcommit hash
  4. 手順 3 のと手順 1 のgit show <commitHash>:/path/to/fileを使用してコマンドを実行します。commit hashpath/to/file

注:相対パスを指定する場合は、 を追加することが./重要と思われgit show b2f8be577166577c59b55e11cfff1404baf63a84:./flight-simulation/src/main/components/nav-horiz.htmlます。

于 2016-11-03T11:21:50.763 に答える
50

Jim Hunzikerの回答に加えて、

リビジョンからファイルを次のようにエクスポートできます。

git show HEAD@{2013-02-25}:./fileInCurrentDirectory.txt > old_fileInCurrentDirectory.txt

お役に立てれば :)

于 2014-04-30T05:07:42.637 に答える
42

ファイルの古いリビジョンとの違いをすばやく確認するには:

git show -1 filename.txt> ファイルの最後のリビジョンと比較するには

git show -2 filename.txt> 2 番目の最後のリビジョンと比較する

git show -3 fielname.txt > 最後の 3 番目の最後のリビジョンと比較するには

于 2018-12-13T06:05:00.390 に答える
30

git log -pコミット ログだけでなく、各コミットの差分も表示されます (マージ コミットを除く)。次に、 を押し/てファイル名を入力し、 を押しenterます。nまたはを押しpて、次/前の出現箇所に移動します。これにより、ファイルの変更だけでなく、コミット情報も表示されます。

于 2016-05-06T20:02:07.693 に答える
1

特定のリビジョンから複数のファイルを取得するヘルパー

マージの競合を解決しようとする場合、このヘルパーは非常に便利です:

#!/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)

GitHub アップストリーム.

使用法:

git-show-save other-branch file1.c path/to/file2.cpp

結果: 以下には、ファイルの代替バージョンが含まれています。

file1.old.c
path/to/file2.old.cpp

このように、ファイル拡張子を保持することで、エディターが文句を言わず、新しいファイルのすぐ隣にある古いファイルを簡単に見つけることができます。

于 2018-12-07T10:54:05.813 に答える