削除されたファイルをGitで表示する


104

私はGitでファイルを削除してからコミットしたので、ファイルは作業コピーにありません。そのファイルの内容を見たいのですが、実際には復元しません。これどうやってするの?

回答:


144
git show HEAD^:path/to/file

明示的なコミット識別子を使用したりHEAD~n、古いバージョンを表示したり、削除してから複数のコミットがあった場合に使用したりできます。


6
path/to/fileは、プロジェクトの最上部(リポジトリーの最上位ディレクトリー)からの絶対パスであることに注意してください。
JakubNarębski、2009

1
私は持っていますfatal: Invalid object name 'HEAD^'.(私が言及しなければならないのは、「初期コミット」しかないことです)
vladkras

1
削除がステージングされているがコミットされていない場合は、HEAD ^の代わりにHEADを使用してください(HEADに存在していたため)。たとえば、ファイルが必要だと思ったので、ファイルを追加して作業を保存することを約束し、後で別の解決策を思いついたときに削除しました。再度コミットする前に元のファイルを確認するために、git show HEAD:path / to / file
Tony Wickham

1
これは、ファイルが最新のコミットで削除された場合にのみ機能することにも言及する価値があると思います。ファイルが数回前に削除された場合は、他の回答のいずれかを使用する必要があります。
jayhendren

50

これがしばらく前に削除したファイルであり、リビジョンを探したくない場合は、使用できます(fooこの例では、ファイルに名前が付けられています。フルパスを使用できます)。

git show $(git rev-list --max-count=1 --all -- foo)^:foo

rev-listすべてのリビジョンの呼び出しルックスfooだけのリスト1。rev-listリストは新しい順にリストされているので、リストされているのは変更された最後のリビジョンでfoo、削除されたコミットになりますfoo。(これは、gitが削除されたファイルの変更を許可せず、削除されたままであることを前提としています。)存在しないため、そのままrev-list返されるリビジョンをそのまま使用することはできませんfoo。ファイルの最後のリビジョンを含む直前のファイル、つまり^in を要求する必要がありますgit show


2
最後のfooを./fooに変更する必要があるかもしれません。また、bashを使用していない場合は、「git rev-list --max-count = 1 --all-foo」でIDを取得してから、「git show 5824127a8d99576632a04ac2b5c2344bcf751967:./ foo」をID(524 .. is id)
Dror 2014

1
素敵な答え。^の代わりに〜を使わなければなりませんでした。なぜだかわかりません。そして、人々がそれを明確にしているように、ここでの「foo」はgitルートからのフルパスである必要があります。
pedorro 2015年

**/fooパスがわからない場合は記述できます(これはrev-listコマンドでは機能しますが、showコマンドでは機能しません。ただし、rev-listコマンドからのコミットを使用すると、パスを見つけることができます)。
ニコライ

10

正確なパスを思い出せない可能性があるため、代わりにgit logからsha1を取得して、単に発行することができます

 git cat-file -p <sha1>

5
Samuel Slundに代わって:上記で使用するsha1合計を見つける1つの方法はgit whatchanged --no-abbrev、git(またはsvn)ログに類似した出力を提供することです。
アートレスノイズ2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.