it-swarm.com.de

Wie man git log Dateinamen wie svn log -v anzeigen lässt

Das SVN-Protokoll verfügt über einen "-v" -Modus, der Dateinamen von Dateien ausgibt, die bei jedem Commit geändert wurden.

jes5199 $ svn log -v 
 --------------------------------------- --------------------------------- 
 r1 | jes5199 | 2007-01-03 14:39:41 -0800 (Mi, 03. Jan. 2007) | 1 Zeile 
 Geänderte Pfade: 
 A/AUTHORS maturiert 
 Ein /MacOSX-Reifen.____.]

Gibt es eine schnelle Möglichkeit, eine Liste der geänderten Dateien in jedem Commit in Git abzurufen?

892
jes5199

Für vollständige Pfadnamen geänderter Dateien:

git log --name-only

Für vollständige Pfadnamen und Status der geänderten Dateien:

git log --name-status

Für abgekürzte Pfadnamen und eine Differenz der geänderten Dateien:

git log --stat

Es gibt viel mehr Möglichkeiten, siehe Dokumentation .

1398
CB Bailey

HINWEIS: git whatchanged ist veraltet, verwenden Sie git log stattdessen

Neue Benutzer sollten stattdessen git-log [1] verwenden. Der Befehl whatchanged ist im Wesentlichen derselbe wie git-log [1] , zeigt jedoch standardmäßig die Diff-Ausgabe des Rohformats an und überspringt Zusammenführungen.

Der Befehl wird hauptsächlich aus historischen Gründen aufbewahrt; Die Finger vieler Leute, die Git lange vor der Erfindung von git log durch Lesen der Linux-Kernel-Mailingliste gelernt haben, sind darauf trainiert, es zu tippen.


Mit dem Befehl git whatchanged --stat können Sie eine Liste der Dateien abrufen, die sich bei jedem Commit geändert haben (zusammen mit der Commit-Nachricht).

Verweise

139
mipadi

git show ist auch ein großartiger Befehl.

Es ist ein bisschen wie svn diff, aber Sie können es als Commit-Guid übergeben und den Unterschied sehen.

46
ptc

Wenn Sie die Dateinamen nur ohne den Rest der Commit-Nachricht erhalten möchten, können Sie Folgendes verwenden:

git log --name-only --pretty=format: <branch name>

Dies kann dann erweitert werden, um die verschiedenen Optionen zu verwenden, die den Dateinamen enthalten:

git log --name-status --pretty=format: <branch name>

git log --stat --pretty=format: <branch name>

Bei dieser Methode ist zu beachten, dass die Ausgabe einige leere Zeilen enthält, die ignoriert werden müssen. Die Verwendung dieser Option kann hilfreich sein, wenn Sie die Dateien anzeigen möchten, die in einem lokalen Zweig geändert wurden, aber noch nicht in einen Remote-Zweig verschoben wurden, und wenn nicht garantiert ist, dass der neueste von der Remote bereits eingezogen wurde. Zum Beispiel :

git log --name-only --pretty=format: my_local_branch --not Origin/master

Zeigt alle Dateien an, die in der lokalen Verzweigung geändert, aber noch nicht in der Master-Verzweigung auf der Fernbedienung zusammengeführt wurden.

42
Hazok

Ich benutze dies täglich, um den Verlauf mit geänderten Dateien anzuzeigen:

git log --stat --pretty=short --graph

Um es kurz zu machen, fügen Sie in Ihrem .gitconfig einen Alias ​​hinzu:

git config --global alias.ls 'log --stat --pretty=short --graph'
36
xsor

Ich benutze das:

git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort | uniq

die nur eine Liste von Dateien und deren Status ausgibt (hinzugefügt, geändert, gelöscht):

A   sites/api/branding/__init__.py
M   sites/api/branding/wtv/mod.py
...
15
Sofia

git diff --stat HEAD^! zeigt geänderte Dateien und hinzugefügte/entfernte Zeilenzahlen für das letzte Festschreiben (HEAD).

Es scheint mir, dass es keinen einzigen Befehl gibt, um eine präzise Ausgabe zu erhalten, die nur aus Dateinamen und hinzugefügten und entfernten Zeilenzahlen für mehrere Commits gleichzeitig besteht. Deshalb habe ich mein eigenes Bash-Skript dafür erstellt:

#!/bin/bash
for ((i=0; i<=$1; i++))
do
    sha1=`git log -1 --skip=$i --pretty=format:%H`
    echo "HEAD~$i $sha1"
    git diff --stat HEAD~$(($i+1)) HEAD~$i 
done

Um zB angerufen zu werden. ./changed_files 99, um die Änderungen in einer übersichtlichen Form von HEAD bis HEAD~99 abzurufen. Kann zB verrohrt werden. zu less.

7
nrz

Ich finde, das Folgende ist die ideale Anzeige, um in einem übersichtlichen Format aufzulisten, welche Dateien sich pro Festschreibung geändert haben:

git log --pretty=oneline --graph --name-status
2
Peter Suwara

Ein weiterer nützlicher Befehl wäre git diff-tree <hash>, wobei Hash auch ein Hash-Bereich sein kann (bezeichnet mit <old>..<new>notation). Ein Ausgabebeispiel:

$ git diff-tree  HEAD
:040000 040000 8e09a be406 M myfile

Die Felder sind:

Quellmodus, Zielmodus, Quell-Hash, Ziel-Hash, Status, Dateiname

Folgende Status werden erwartet: D (gelöscht), A (hinzugefügt), M (geändert) usw Die vollständige Beschreibung finden Sie in der Manpage.

0
Omer Dagan

Ich benutze im Allgemeinen diese, um die Protokolle zu erhalten:

$ git log --name-status --author='<Name of author>' --grep="<text from Commit message>"

$ git log --name-status --grep="<text from Commit message>"
0
Gaurav