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
--no-commit-id
unterdrückt die Commit-ID-Ausgabe. --pretty
gibt eine leere Formatzeichenfolge an, um den Anfang zu vermeiden. --name-only
zeigt nur die betroffenen Dateinamen an (Thanks Hank). -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:
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.