2703 Stimmen

Auflisten der Namen von Dateien, die zwischen zwei Übertragungen geändert wurden

Ich habe eine Reihe von Übertragungen im Repository. Ich möchte eine Liste der Dateien sehen, die zwischen zwei Commits geändert wurden - von SHA1 à SHA2 .

Welchen Befehl soll ich verwenden?

3 Stimmen

Für eine Übergabe und ihre Eltern: stackoverflow.com/questions/424071/

1 Stimmen

Sie sollten den Titel der Frage ändern... Sie wollen nicht die geänderten Dateinamen auflisten... Sie wollen die Namen der geänderten Dateien auflisten. Beachten Sie, dass es möglich ist, die Namen von Dateien zu ändern, ohne deren Inhalt zu ändern.

3599voto

Peter Punkte 120325
git diff --name-only SHA1 SHA2

wobei Sie nur genügend SHA-Hash angeben müssen, um die Übertragungen zu identifizieren. Sie können zum Beispiel auch Folgendes tun

git diff --name-only HEAD~10 HEAD~5

um die Unterschiede zwischen dem zehnten und dem fünften Commit (oder so) zu sehen.

192 Stimmen

Dies funktioniert auch für git show. git show --name-only SHA1 .

116 Stimmen

git diff --name-status [TAG|SHA1] zeigt auch, welche Operationen an den Dateien durchgeführt wurden

2 Stimmen

Sie können auch Folgendes tun: git diff --name-only HEAD@{3} HEAD@{0} für genau die Commits, die Sie vergleichen wollen.

586voto

artfulrobot Punkte 19115
git diff --name-status [SHA1 [SHA2]]

ist wie --name-only, nur dass Sie ein einfaches Präfix erhalten, das Ihnen sagt, was mit der Datei passiert ist (geändert, gelöscht, hinzugefügt...)

git log --name-status --oneline [SHA1..SHA2]

ist ähnlich, aber Commits werden nach der Commit-Nachricht aufgelistet, so dass Sie sehen können, wann eine Datei geändert wurde.

  • wenn Sie daran interessiert sind, was mit bestimmten Dateien/Ordnern passiert ist, können Sie Folgendes anhängen -- <filename> [<filename>...] zum git log Version.

  • wenn Sie sehen wollen, was bei einem einzelnen Commit passiert ist, nennen Sie es SHA1, dann machen Sie
    git log --name-status --oneline [SHA1^..SHA1]

Dateistatus-Flags:

Flagge

Name

Bedeutung

M

geändert

Die Datei wurde geändert

C

bearbeiten.

Die Datei wurde kopiert und geändert

R

umbenennen-bearbeiten

Die Datei wurde umbenannt und geändert

A

hinzugefügt.

Datei wurde hinzugefügt

D

gelöscht

Die Datei wurde gelöscht

U

unmerged

Datei hat Konflikte nach einer Zusammenführung

0 Stimmen

Ich habe zufällig git diff --name-status gesagt und es hat die "hinzugefügte Datei" angezeigt.

1 Stimmen

Für git log muss es zwei Punkte zwischen den SHAs haben, wie SHA1..SHA2, und der zweite SHA ist nicht optional, also sollte es so aussehen: git log --name-status --oneline [SHA1..SHA2]

0 Stimmen

Gibt es eine Möglichkeit, bestimmte Dateien/bestimmte Dateitypen auszuschließen?

159voto

leeyuiwah Punkte 5976

Es scheint, dass niemand den Schalter erwähnt hat --stat :

$ git diff --stat HEAD~5 HEAD
 .../java/org/apache/calcite/rex/RexSimplify.java   | 50 +++++++++++++++++-----
 .../apache/calcite/sql/fun/SqlTrimFunction.java    |  2 +-
 .../apache/calcite/sql2rel/SqlToRelConverter.java  | 16 +++++++
 .../org/apache/calcite/util/SaffronProperties.java | 19 ++++----
 .../org/apache/calcite/test/RexProgramTest.java    | 24 +++++++++++
 .../apache/calcite/test/SqlToRelConverterTest.java |  8 ++++
 .../apache/calcite/test/SqlToRelConverterTest.xml  | 15 +++++++
 pom.xml                                            |  2 +-
 .../apache/calcite/adapter/spark/SparkRules.java   |  7 +--
 9 files changed, 117 insertions(+), 26 deletions(-)

Außerdem gibt es --numstat

$ git diff --numstat HEAD~5 HEAD
40      10      core/src/main/java/org/apache/calcite/rex/RexSimplify.java
1       1       core/src/main/java/org/apache/calcite/sql/fun/SqlTrimFunction.java
16      0       core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java
8       11      core/src/main/java/org/apache/calcite/util/SaffronProperties.java
24      0       core/src/test/java/org/apache/calcite/test/RexProgramTest.java
8       0       core/src/test/java/org/apache/calcite/test/SqlToRelConverterTest.java
15      0       core/src/test/resources/org/apache/calcite/test/SqlToRelConverterTest.xml
1       1       pom.xml
4       3       spark/src/main/java/org/apache/calcite/adapter/spark/SparkRules.java

y --shortstat

$ git diff --shortstat HEAD~5 HEAD
9 files changed, 117 insertions(+), 26 deletions(-)

18 Stimmen

Die akzeptierte Antwort ist richtig, aber dies ist sehr nützlich und gibt Ihnen ein paar zusätzliche Informationen. Danke!

3 Stimmen

Ich stimme zu, dass dies eine nützlichere Antwort ist, da sie die unterschiedlichen Statistiken enthält.

79voto

Tim James Punkte 1403

Aber um die Dateien zu sehen, die zwischen Ihrem Zweig und seinem gemeinsamen Vorgänger mit einem anderen Zweig (z.B. origin/master) geändert wurden:

git diff --name-only `git merge-base origin/master HEAD`

1 Stimmen

Das war wirklich nützlich! Ich wünschte, ich könnte einfach sagen git diffstatus master oder ähnliches, die das oben genannte auslöst.

3 Stimmen

Oder git show --pretty=format: --name-only origin/master.. .

0 Stimmen

Sie können es vielleicht nicht zu einem Git-Alias machen, aber Sie können es definitiv in Ihre .bashrc einfügen.

41voto

m12lrpv Punkte 479

Das größte Problem bei allen vorherigen Antworten ist, dass man in einen Pager geleitet wird, was extrem lästig ist, wenn man die Informationen, die man aus dem Repository herausholen will, nutzen möchte. Vor allem, wenn man ein Entwickler ist, der lieber die Geschäftslogik der Anwendung lernen möchte, die er entwickeln soll, anstatt Vim-Befehle zu lernen.

Die Verwendung von --no-pager behebt dieses Problem.

git --no-pager  diff --name-only sha1 sha2

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