wake-up-neo.com

Wie liste ich alle Dateien in einem Commit auf?

Ich suche nach einem einfachen git-Befehl, der eine schön formatierte Liste aller Dateien enthält, die Teil des durch einen Hash (SHA1) gegebenen Commits waren und keine zusätzlichen Informationen enthalten.

Ich habe versucht:

git show a303aa90779efdd2f6b9d90693e2cbbbe4613c1d

Obwohl es die Dateien auflistet, enthält es auch unerwünschte Diff-Informationen für jede Datei.

Gibt es einen anderen git-Befehl, der genau die Liste liefert, die ich möchte, damit ich es nicht aus der git show-Ausgabe analysieren kann?

2362
Philip Fourie

Preferred Way (weil es sich um einen plumbing -Befehl handelt; soll programmatisch sein):

$ git diff-tree --no-commit-id --name-only -r bd61ad98
index.html
javascript/application.js
javascript/ie6.js

Ein anderer Weg (weniger bevorzugt für Skripte, da es sich um einen porcelain -Befehl handelt;

$ git show --pretty="" --name-only bd61ad98    
index.html
javascript/application.js
javascript/ie6.js

  • Der --no-commit-id unterdrückt die Commit-ID-Ausgabe.
  • Das --pretty-Argument gibt eine leere Formatzeichenfolge an, um die Cruft am Anfang zu vermeiden.
  • Das Argument --name-only zeigt nur die Dateinamen an, die betroffen waren (Thanks Hank).
  • Das -r-Argument soll in Unterbäume rekursieren
3149
Ryan McGeary

Wenn Sie eine Liste der geänderten Dateien erhalten möchten:

git diff-tree --no-commit-id --name-only -r <commit-ish>

Wenn Sie eine Liste aller Dateien in einem Commit abrufen möchten, können Sie verwenden

git ls-tree --name-only -r <commit-ish>
201
Jakub Narębski

Ich gehe einfach davon aus, dass gitk dafür nicht gewünscht ist. In diesem Fall versuchen Sie git show --name-only <sha>.

195
Hank Gay

Ich persönlich benutze die Kombination von --stat und --oneline mit dem show Befehl:

git show --stat --oneline HEAD
git show --stat --oneline b24f5fb
git show --stat --oneline HEAD^^..HEAD

Wenn Sie die Statistiken zum Hinzufügen/Entfernen nicht mögen/wollen, können Sie --stat durch --name-only ersetzen.

git show --name-only --oneline HEAD
git show --name-only --oneline b24f5fb
git show --name-only --oneline HEAD^^..HEAD
147
Tuxdude

Kürzlich musste ich alle geänderten Dateien zwischen zwei Commits auflisten. Also habe ich diesen (auch * nix-spezifischen) Befehl verwendet

git show --pretty="format:" --name-only START_COMMIT..END_COMMIT | sort | uniq

Update : Oder wie Ethan unten zeigt

git diff --name-only START_COMMIT..END_COMMIT

Bei Verwendung von --name-status wird die Änderung (hinzugefügt, geändert, gelöscht usw.) neben jeder Datei eingefügt 

git diff --name-status START_COMMIT..END_COMMIT
63
lunohodov

Du kannst es auch tun 

git log --name-only

und Sie können verschiedene Commits durchsuchen, Commit-Nachrichten und die geänderten Dateien verwenden.

Geben Sie q ein, um Ihre Eingabeaufforderung zurückzugeben.

62
Indu Devanath

Einfachste Form:

git show --stat (hash)

Das ist leichter zu merken und gibt Ihnen alle Informationen, die Sie benötigen.

Wenn Sie wirklich nur die Namen der Dateien möchten, können Sie die Option --name-only Hinzufügen.

git show --stat --name-only (hash)

58
VaTo

Ich benutze geändert Alias ​​oft. Um es einzurichten:

git config --global alias.changed 'show --pretty="format:" --name-only'

dann:

git changed (lists files modified in last commit)   
git changed bAda55 (lists files modified in this commit)
git changed bAda55..ff0021 (lists files modified between those commits)

Ähnliche Befehle, die nützlich sein können:

git log --name-status --oneline (very similar, but shows what actually happened M/C/D)
git show --name-only
46
takeshin

Verwenden des Standardbefehls git diff (auch für Scripting geeignet):

git diff --name-only <sha>^ <sha>

Wenn Sie auch den Status der geänderten Dateien erhalten möchten:

git diff --name-status <sha>^ <sha>

Dies funktioniert gut mit Merge-Commits.

37
vquintans

Benutzen 

git log --name-status

Dies zeigt Ihnen die Commit-ID, die Nachricht, die geänderten Dateien und ob sie geändert, erstellt, hinzugefügt oder gelöscht wurden. So etwas wie ein All-in-One-Befehl.

26
alpha_989
 $ git log 88ee8 ^ .. 88ee8 - name-only --pretty = "format:" 
24
Pat Notz

OK, Es gibt mehrere Möglichkeiten, alle Dateien in einem bestimmten Commit anzuzeigen ...

Um die Info- und show-only-Namen der Dateien, die zugesagt haben, zu reduzieren, können Sie einfach das Flag --name-only oder --name-status hinzufügen. Diese Flags zeigen nur die Dateinamen an, die sich von den vorherigen Commits unterscheiden, wie Sie möchten ...

Sie können also git diff gefolgt von --name-only mit zwei Festschreibungshashes nach <sha0> <sha1> tun, etwa wie folgt:

git diff --name-only 5f12f15 kag9f02 

Ich erstelle das folgende Bild, um alle Schritte zu zeigen, die in dieser Situation durchlaufen werden müssen:

 git diff --name-only 5f12f15 kag9f02

19
Alireza

Ich verwende dies, um eine Liste modifizierter Dateien zwischen zwei Änderungssätzen abzurufen:

git diff --name-status <SHA1> <SHA2> | cut -f2
15
user135507

Ich benutze gerne

git show --stat <SHA1>^..<SHA2>
15
git show --name-only commitCodeHere
13

Es gibt auch git whatchanged, was niedriger ist als git log.

NAME
       git-whatchanged - Show logs with difference each commit introduces

Es gibt die Commit-Zusammenfassung mit einer Liste von Dateien darunter mit ihren Modi aus und wenn dort hinzugefügt (A), gelöscht (D) oder geändert (M);

$ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363

Würde etwas geben wie:

commit f31a441398fb7834fde24c5b0c2974182a431363
Author: xx <[email protected]>
Date:   Tue Sep 29 17:23:22 2015 +0200

    added fb skd and XLForm

:000000 100644 0000000... 90a20d7... A  Pods/Bolts/Bolts/Common/BFCancellationToken.h
:000000 100644 0000000... b5006d0... A  Pods/Bolts/Bolts/Common/BFCancellationToken.m
:000000 100644 0000000... 3e7b711... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h
:000000 100644 0000000... 9c8a7ae... A  Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m
:000000 100644 0000000... bd6e7a1... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h
:000000 100644 0000000... 947f725... A  Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m
:000000 100644 0000000... cf7dcdf... A  Pods/Bolts/Bolts/Common/BFDefines.h
:000000 100644 0000000... 02af9ba... A  Pods/Bolts/Bolts/Common/BFExecutor.h
:000000 100644 0000000... 292e27c... A  Pods/Bolts/Bolts/Common/BFExecutor.m
:000000 100644 0000000... 827071d... A  Pods/Bolts/Bolts/Common/BFTask.h
...

Ich weiß, dass diese Antwort nicht "ohne fremde Informationen" passt, aber ich denke immer noch, dass diese Liste nützlicher ist als nur die Dateinamen.

12
Koen.

Ich mag das:

git diff --name-status <SHA1> <SHA1>^
11
skiphoppy

Verwenden Sie den einfachen einzeiligen Befehl, wenn Sie nur die Liste der Dateien beim letzten Commit ändern möchten:

git diff HEAD~1 --name-only
9
Developer-Sid

Eine perfekte Antwort darauf gefunden:

git show --name-status --oneline <commit-hash>

Damit ich es wissen kann 

which files were just modified M

Which files were newly added , A

Which files were deleted , D
8
Ijaz Ahmad Khan

Zeigen Sie das Protokoll an.

COMMIT kann leer sein ("") oder die sha-1 oder die sha-1 verkürzt werden.

git log COMMIT -1 --name-only

Dadurch werden nur die Dateien aufgelistet, die für die weitere Verarbeitung sehr nützlich sind.

git log COMMIT -1 --name-only --pretty=format:"" | grep "[^\s]"
8
thefreshteapot

Listen Sie die Dateien auf, die sich in einem Commit geändert haben:

git diff --name-only SHA1^ SHA1

Hier werden keine Protokollnachrichten, zusätzlichen Zeilenumbrüche oder andere Unordnung angezeigt. Dies funktioniert für jedes Commit, nicht nur für das aktuelle. Ich bin nicht sicher, warum es noch nicht ganz erwähnt wurde, also füge ich es hinzu.

8
Newtonx

Eine Kombination aus "git show --stat" (danke Ryan) und ein paar sed-Befehlen sollten die Daten für Sie reduzieren:

git show --stat <SHA1> | sed -n "/ [\w]\*|/p" | sed "s/|.\*$//"

Dadurch wird nur die Liste der geänderten Dateien erstellt.

5
seanhodges

Es gibt einen einfachen Trick, der als Dateiliste angezeigt wird. Fügen Sie einfach : nach dem Hash hinzu.

git show 9d3a52c474:

Sie können dann bohren,

git show 9d3a52c474:someDir/someOtherDir

Wenn Sie auf eine Datei klicken, erhalten Sie die Rohversion der Datei. Welches ist manchmal das, was Sie wollen, wenn Sie nur nach einer Nizza Referenz oder nach Schlüsselstücken suchen (diffs kann alles zum Durcheinander bringen),

git show 9d3a52c474:someDir/someOtherDir/somefile

Der einzige Nachteil dieser Methode besteht darin, dass sie nicht leicht einen Dateibaum anzeigt.

5
srcspider
git show [email protected]{0}

funktioniert gut für mich

2
Bruce

versuchen Sie diesen Befehl, um den Namen und die Nummer der Zeile zu ändern 

git show --stat <commit-hash>

nur Dateinamen anzeigen 

git show --stat --name-only  <commit-hash>

für get last commit geben Sie dann diesen Befehl aus

git log -1 oder für alle git log 

1
Jignesh Joisar

Ich benutze dies, um eine Liste der geänderten Dateien in Merge Commit zu erhalten

λ git log -m -1 --name-only --pretty="format:"
configs/anotherconfig.xml
configs/configsInRepo.xml

oder

λ git log -m -1 --name-status --pretty="format:"
A       configs/anotherconfig.xml
M       configs/configsInRepo.xml
1
Piotr Perak

Wenn Sie das oh-my-zsh- und git-Plugin verwenden, ist die Verknüpfung glg hilfreich:

$ glg
commit f014429013e360e1e1ef4f297b315358a5d47b5e
Author: huhu <[email protected]>
Date:   Tue Dec 18 07:21:11 2018 +0800

    Refine profile page.

 mini/app.json                                |  27 ++++++++-
 mini/components/postItemTwo/postItemTwo.wxml |   6 +-
 mini/pages/daren/daren.js                    |  99 ++++++++++++++++++++++++++++++++
 mini/pages/daren/daren.json                  |   3 +
 mini/pages/daren/daren.wxml                  |  16 ++++++
 mini/pages/daren/daren.wxss                  |  27 +++++++++
1
Henry