Gitリポジトリ内のすべての削除済みファイルを一覧表示するにはどうすればよいですか?


306

ファイルが削除されたときの情報がGitに保存され、個々のコミットをチェックしてどのファイルが削除されたかを確認できることは知っていますが、リポジトリの存続期間全体で削除されたすべてのファイルのリストを生成するコマンドはありますか?


この答えに出くわしたが、1つのコミットハッシュまたは別のブランチから別のコミットハッシュまたはブランチに追加、名前変更、削除、変更などされたファイルのリストを見たいだけの場合は、次のようにしgit diff --name-status commit_hashます。
ガブリエルステープルズ

回答:


411
git log --diff-filter=D --summary

Gitリポジトリーで削除されたファイル見つけて復元するを参照してください

削除されたコミットに関するすべての情報が必要ない場合はgrep delete、そこにを追加するだけです。

git log --diff-filter=D --summary | grep delete

13
警告:削除したファイルが一覧表示されます。あなたは、同じ名前の新しいファイルを作成したファイルを、削除した場合、それはなりますが、現存するファイルがあるのにもかかわらず、このリストに表示します。
TJクラウダー2014

24
git whatchangedコマンドも確認する必要があります。すごいかっこいい。
Mr.Black

6
これにより、名前変更も削除としてリストされます。これらの使用をスキップするにはgit log --find-renames --diff-filter=D --summary | grep delete
Slaven Rezic 2015

2
git 2.9では、名前の変更の検出がデフォルトで有効になっています。再びこれらの削除が使用として表示するにはgit log --no-renames --diff-filter=D --summary | grep delete
マイケル・グロース

2
grep deleteコミットメッセージに削除という単語が含まれている場合、それもピックアップされるため、使用には注意してください。grep 'delete mode'代わりに使用してください。
Vadim


37

現在削除されているファイルのみを表示したい場合は、次のように使用できます。

git ls-files --deleted

その後、それらを削除したい場合(「git rm」を使用せずに削除した場合)パイプはxargs git rmになります

git ls-files --deleted | xargs git rm

11
これにより、作業コピーで削除されたインデックス内のファイルのみが表示されます。OPは、これまでに削除されたすべてのファイルを要求します。
Max Nanasy 2012

1
またはgit rm $(git ls-files --deleted)
yunzen 2015

それは私が困っ検索で適切に私のクエリをフレージングを持っていたので、OPが望んで、これは、少なくともまだ自分のために有用であったではないにもかかわらず
solstice333

10

このスタックオーバーフローの回答を引用します。

これは、変更された各ファイルの変更のタイプ(A:Added、M:Modified、D:Deleted)を取得するための非常に優れた方法です。

git diff --name-status

4

そして、結果を何らかの形で制限したい場合は、ここに良いものがあります:

$ git log --diff-filter=D --summary | sed -n '/^commit/h;/\/some_dir\//{G;s/\ncommit \(.*\)/ \1/gp}'
delete mode 100644 blah/some_dir/file1 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file2 d3bfbbeba5b5c1da73c432cb3fb61990bdcf6f64
delete mode 100644 blah/some_dir/file3 9c89b91d8df7c95c6043184154c476623414fcb7

削除されたすべてのファイルsome_dir(sedコマンドを参照)と、それが発生したコミット番号が表示されます。すべてのsed正規表現で実行できます(これを使用して、削除されたファイルタイプなどを検索します)


2
私は、それが日常の開発者生活で役立つように複雑にする方法だと思います。あなたは、現在のディレクトリから削除されたリストファイルにしたい場合は代わりに、単に実行しますgit log --diff-filter=D .
SEBI

私が持っていたのは、ディレクトリも削除されて、名前の新しい部分だけだった場合です。
estani 2015

4

Windowsにはgrepコマンドがないため、PowerShellでこれが機能しました。

git log --find-renames --diff-filter=D --summary | Select-String -Pattern "delete mode" | sort -u > deletions.txt

なにSelect-String
MarcusJ 2017

1
これはPowerShellコマンドレットです。docs.microsoft.com/en-us/powershell/module/…を
James Skemp

WindowsにはFINDFINDSTRがありますが、私はそれらを使用したことがないことを認めざるを得ません。Git Bashのインストールが最も簡単な方法です。代わりに、肥大化したCygwinがあります
Peter Mortensen

4

some_branch内のすべての削除済みファイルを表示

git diff origin/master...origin/some_branch --name-status | grep ^D

または

git diff origin/master...origin/some_branch --name-status --diff-filter=D 

2
Dが含まれるすべてのファイルが含まれるため、これは機能しません。あなたのような何かを必要とするgit diff origin/master...origin/some_branch --name-status | grep ^Dgit diff origin/master...origin/some_branch --name-status --diff-filter=D
nathaneastwood

1

これにより、すべてのブランチで削除されたすべてのファイルのリストが、パスでソートされて表示されます。

git log --diff-filter=D --summary | grep "delete mode 100" | cut -c 21- | sort > deleted.txt

msysgit(2.6.1.windows.1)で動作します。gitファイルはモード100644または100755としてコミットされている可能性があるため、「削除モード100」が必要であることに注意してください。

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