Wie listet man alle Dateien eines Commits auf?

Ich suche nach einem einfachen git Befehl, der eine schön formatierte Liste aller Dateien liefert, die Teil des Commits waren, das durch einen Hash (SHA1) gegeben wurde, ohne irgendwelche zusätzlichen Informationen.

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 nur die gewünschte Liste liefert, so dass ich es vermeiden kann, sie von der git show Ausgabe zu analysieren?

   

    Bevorzugter Weg (weil es ein Klempnerbefehl ist , der programmatisch sein soll):

     $ 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, weil es ein Porzellan- Befehl ist; gemeint ist, Benutzer zugewandt zu sein)

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

    • Die --no-commit-id unterdrückt die Commit-ID-Ausgabe.
    • Das Argument --pretty gibt eine leere Formatzeichenfolge an, um den Anfang zu vermeiden.
    • Das Argument --name-only zeigt nur die betroffenen Dateinamen an (Thanks Hank).
    • Das Argument -r dient dazu, in Teilbäume zurückzuspringen

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

     git diff-tree --no-commit-id --name-only -r  

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

     git ls-tree --name-only -r  

    Ich nehme nur an, dass gitk dafür nicht erwünscht ist. Versuchen Sie in diesem Fall git show --name-only .

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

     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öchten / möchten, können Sie –stat mit –nur-nur ersetzen

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

    Kürzlich musste ich alle geänderten Dateien zwischen zwei Commits auflisten. Also habe ich diesen (auch * nixspezifischen) Befehl benutzt

     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 

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

     git diff --name-status START_COMMIT..END_COMMIT 

    Sie können auch tun

     git log --name-only 

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

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

    Einfachste Form:

    git show --stat (hash)

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

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

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

    Ich benutze häufig den geänderten Aliasnamen. 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 

    Standard-Befehl git diff verwenden (auch für Skripting geeignet):

     git diff --name-only ^  

    Wenn Sie auch den Status der geänderten Dateien haben wollen:

     git diff --name-status ^  

    Dies funktioniert gut mit Merge-Commits.

     $ git log 88ee8 ^ .. 88ee8 - nur -name --pretty = "format:"
    

    OK, es gibt mehrere Möglichkeiten, alle Dateien in einem bestimmten Commit anzuzeigen …

    Um die Informationen zu reduzieren und nur die Namen der Dateien --name-only die festgeschrieben wurden, können Sie einfach --name-only oder --name-status flag … hinzufügen. Diese Flags zeigen Ihnen nur die Dateinamen an, die sich von früheren Commits unterscheiden wollen…

    Sie können also git diff gefolgt von --name-only , mit zwei Commit-Hashes nach , etwa so:

     git diff --name-only 5f12f15 kag9f02 

    Ich erstelle auch das folgende Bild, um alle Schritte in dieser Situation zu zeigen:

    git diff - Nur-Name 5f12f15 kag9f02

    Ich benutze dies, um eine Liste modifizierter Dateien zwischen zwei Changesets zu erhalten:

     git diff --name-status   | cut -f2 

    Ich mag es zu benutzen

     git show --stat ^.. 
     git show --name-only commitCodeHere 

    Ich mag das:

     git diff --name-status  ^ 

    Es gibt auch git whatchanged , das ist niedriger als git log

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

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

     $ git whatchanged f31a441398fb7834fde24c5b0c2974182a431363 

    Würde etwas geben wie:

     commit f31a441398fb7834fde24c5b0c2974182a431363 Author: xx  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 wirklich “ohne überflüssige Informationen” übereinstimmt, aber ich denke immer noch, dass diese Liste nützlicher ist als nur die Dateinamen.

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

     git diff HEAD~1 --name-only 

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

     git diff --name-only SHA1^ SHA1 

    Dies zeigt keine Protokollnachrichten, zusätzliche Zeilenumbrüche oder andere Unordnung. Dies funktioniert für jeden Commit, nicht nur für den aktuellen. Ich bin mir nicht sicher, warum es noch nicht erwähnt wurde, also füge ich es hinzu.

    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. Etwas von einem All-in-One-Befehl.

    Zeigen Sie das Protokoll an.

    COMMIT kann leer sein (“”) oder sha-1 oder sha-1 gekürzt.

     git log COMMIT -1 --name-only 

    Dies wird nur die Dateien auflisten, sehr nützlich für die weitere Verarbeitung.

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

    Eine perfekte Antwort gefunden:

     git show --name-status --oneline  

    Damit ich es wissen kann

     which files were just modified M Which files were newly added , A Which files were deleted , D 

    Eine Kombination aus ” git show --stat ” (danke Ryan) und ein paar sed-Befehlen sollte die Daten für dich verkleinern:

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

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

    Es gibt einen einfachen Trick, um als Datei-Liste zu sehen, einfach hinzufügen : nach dem Hash.

     git show 9d3a52c474: 

    Sie können dann bohren,

     git show 9d3a52c474:someDir/someOtherDir 

    Wenn Sie eine Datei treffen, erhalten Sie die rohe Version der Datei; was manchmal ist, was Sie wollen, wenn Sie nur nach einer netten Referenz oder Schlüsselstücken des Codes suchen (Diffs können alles zu einem Chaos machen),

     git show 9d3a52c474:someDir/someOtherDir/somefile 

    Einziger Nachteil dieser Methode ist, dass sie nicht einfach einen Baum von Dateien anzeigt.

     git show HEAD@{0} 

    funktioniert gut für mich

    Ich dachte, ich würde eine Zusammenfassung meines Alias ​​teilen .. auch finde ich mit ‘Zsh’ großartig mit git es Chroma Keys alles schön und sagt, Sie wollen Zweig sind in der ganzen Zeit, indem Sie die Eingabeaufforderung ändern.

    Für diejenigen, die von SVN berichten, werden Sie folgendes finden: (Dies ist eine Kombination von Ideen aus verschiedenen Themen, ich schätze nur, wie man Copy / Paste benutzt)

     .gitconfig: ls = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative --name-status >>git ls * 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker| | A icds.xcodeproj/project.pbxproj | A icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata | A icds/AppDelegate.m | A icds/Assets.xcassets/AppIcon.appiconset/Contents.json * e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker| | D Classes/AppInfoViewControler.h | D Classes/AppInfoViewControler.m | D Classes/CurveInstrument.h .gitconfig: lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative >>git lt * 99f21a6 - (HEAD -> swift) New Files from xcode 7 (11 hours ago) Jim Zucker * e0a1bb6 - Move everything to old (11 hours ago) Jim Zucker * 778bda6 - Cleanup for new project (11 hours ago) Jim Zucker * 7373b5e - clean up files from old version (11 hours ago) Jim Zucker * 14a8d53 - (tag: 1.x, origin/swift, origin/master, master) Initial Commit (16 hours ago) Jim Zucker .gitconfig lt = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset' --abbrev-commit --date=relative >> git lt commit 99f21a61de832bad7b2bdb74066a08cac3d0bf3c Author: Jim Zucker  Date: Tue Dec 1 22:23:10 2015 -0800 New Files from xcode 7 A icds.xcodeproj/project.pbxproj A icds.xcodeproj/project.xcworkspace/contents.xcworkspacedata commit e0a1bb6b59ed6a4f9147e894d7f7fe00283fce8d Author: Jim Zucker  Date: Tue Dec 1 22:17:00 2015 -0800 Move everything to old D Classes/AppInfoViewControler.h D Classes/AppInfoViewControler.m D Classes/CurveInstrument.h D Classes/CurveInstrument.m 

    Das sollte funktionieren:

     git status 

    Dies zeigt, was nicht inszeniert ist und was inszeniert wird.