407 Stimmen

Wie kann ich alle gelöschten Dateien in einem Git-Repository auflisten?

Ich weiß, dass Git Informationen darüber speichert, wann Dateien gelöscht werden, und ich kann einzelne Commits überprüfen, um zu sehen, welche Dateien entfernt wurden, aber gibt es einen Befehl, der eine Liste aller gelöschten Dateien über die Lebensdauer eines Repositorys erstellt?

531voto

I82Much Punkte 26081
git log --diff-filter=D --summary

Siehe Finden und Wiederherstellen einer gelöschten Datei in einem Git-Repository

Wenn Sie nicht alle Informationen darüber haben wollen, in welchem Commit sie entfernt wurden, können Sie einfach eine grep delete da drin.

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

112voto

Mark Longair Punkte 412179

Ich denke, dies entspricht Ihren Vorstellungen:

git log --all --pretty=format: --name-only --diff-filter=D | sort -u

... die ich mehr oder weniger direkt übernommen habe diese andere Antwort .

Dies gibt nur Dateipfade ohne andere Informationen aus:

BETA.md
CONTRIBUTING.md
files/en-us/api/file_api/index.html
files/en-us/games/index/index.md
files/en-us/games/visual-js_game_engine/index.html
files/en-us/games/visual_js_ge/index.html
files/en-us/games/visual_typescript_game_engine/index.html
...

51voto

Jim Clouse Punkte 8234

Wenn Sie nur an den aktuell gelöschten Dateien interessiert sind, können Sie dies verwenden:

git ls-files --deleted

wenn Sie sie dann entfernen wollen (falls Sie sie nicht mit "git rm" gelöscht haben), leiten Sie das Ergebnis an xargs git rm

git ls-files --deleted | xargs git rm

22voto

Unter este Stack Overflow-Antwort.

Es ist eine ziemlich saubere Art und Weise, die Änderungsart zu erhalten (A:Hinzugefügt, M:Geändert, D:Gelöscht) für jede Datei, die geändert wurde.

git diff --name-status HEAD~1000

5voto

estani Punkte 20703

Und wenn Sie die Ergebnisse irgendwie einschränken wollen, haben wir hier ein schönes Beispiel:

$ 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

Sie erhalten alle Dateien gelöscht von some_dir (siehe sed-Befehl) zusammen mit der Commit-Nummer, in der es passiert ist. Jede sed regex reicht aus (ich verwende dies, um gelöschte Dateitypen usw. zu finden)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X