Wie wird der Git-Protokollverlauf für ein Unterverzeichnis eines Git-Repos angezeigt?

227

Nehmen wir an, ich habe ein Git-Repo, das so aussieht.

foo/
  .git/
  A/
   ... big tree here
  B/
   ... big tree here

Gibt es eine Möglichkeit, git log zu bitten, nur die Protokollnachrichten für ein bestimmtes Verzeichnis anzuzeigen? Zum Beispiel möchte ich sehen, was berührte Dateien nur in foo / A festschreibt?

ams
quelle

Antworten:

241

foo/Verwenden Sie aus dem Verzeichnis

  git log -- A

Sie benötigen das '-', um sich <path>..von den <since>..<until>Refspecs zu trennen .

# Show changes for src/nvfs
$ git log --oneline -- src/nvfs
d6f6b3b Changes for Mac OS X
803fcc3 Initial Commit

# Show all changes (one additional commit besides in src/nvfs).
$ git log --oneline
d6f6b3b Changes for Mac OS X
96cbb79 gitignore
803fcc3 Initial Commit
GoZoner
quelle
1
Übrigens sollten Sie im "foo" -Foldrer bleiben, bevor Sie "git log - A B"
Sergey Leyko
22
Für Leute, die überfliegen, zeigt dies Änderungen in A und B , nicht nur Awie OP angefordert
aidan
1
@GoZoner, gibt es eine Möglichkeit, alle Commits zu finden, bei denen ein bestimmter Ordnername geändert wurde? Der Ordner hätte verschoben werden können, daher würde ich es vorziehen, nicht
herausfinden zu
3
^^ Aktualisiert, um Änderungen Anur für anzuzeigen, wie OP angefordert.
GoZoner
Was ist, wenn das Verzeichnis im aktuellen Kopf gelöscht wurde?
Aaron Franke
34

Wenn Sie es grafisch sehen möchten, können Sie verwenden

gitk -- foo/A

Geben Sie hier die Bildbeschreibung ein

Reza
quelle
26

Sie können git logmit den Pfadnamen der jeweiligen Ordner verwenden:

git log A B

Das Protokoll zeigt nur die in Aund vorgenommenen Commits an B. Normalerweise werfe ich ein --stat, um die Dinge ein wenig hübscher zu machen, was für schnelle Überprüfungen hilfreich ist.

Nick Tomlin
quelle
26

Eingeben

git log .

Aus dem spezifischen Verzeichnis werden auch Commits in diesem Verzeichnis angegeben.

Nikhil Agarwal
quelle
4
Hat bei mir nicht funktioniert. Nachdem ich in einem bestimmten Verzeichnis gelandet bin und das Git-Protokoll gegeben habe. gab mir alle Commits von root.
AKS
1
Funktioniert bei mir. Mit Git Bash
Buckley
2

Um Änderungen an einem Ordner zu verfolgen, in den der Ordner verschoben wurde, habe ich Folgendes verwendet:

git rev-list --all --pretty=oneline -- "*/foo/subfoo/*"

Dies ist nicht perfekt, da andere Ordner mit demselben Namen erfasst werden. Wenn es jedoch eindeutig ist, scheint es zu funktionieren.

Mafu Josh
quelle
0

Die anderen Antworten zeigen nur die geänderten Dateien.

git log -p DIRist sehr nützlich, wenn Sie den vollständigen Unterschied aller geänderten Dateien in einem bestimmten Unterverzeichnis benötigen .

Beispiel: Alle detaillierten Änderungen in einem bestimmten Versionsbereich anzeigen

git log -p 8a5fb..HEAD -- A B

commit 62ad8c5d
Author: Scott Tiger
Date:   Mon Nov 27 14:25:29 2017 +0100

    My comment

...
@@ -216,6 +216,10 @@ public class MyClass {

+  Added
-  Deleted
Matthias M.
quelle
1
Ich verstehe nicht, wie diese Antwort auf die Frage bezieht
Florian Leitgeb