Jak wyświetlić historię dziennika git dla podkatalogu repozytorium git?

228

Powiedzmy, że mam repozytorium git, które wygląda tak.

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

Czy istnieje sposób, aby poprosić git log, aby wyświetlał tylko komunikaty dziennika dla określonego katalogu. Na przykład chcę zobaczyć, co popełnia dotknięte pliki tylko w foo / A?

ams
źródło

Odpowiedzi:

242

Z katalogu foo/użyj

  git log -- A

Potrzebujesz „-”, aby oddzielić <path>..od <since>..<until>refspecs.

# 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
źródło
1
tak przy okazji, powinieneś pozostać w folderze „foo” przed zrobieniem „git log - A B”
Sergey Leyko 10'16
22
Dla osób przeglądających to pokazuje zmiany A i B , nie tylko Ana żądanie OP
aidan
1
@GoZoner, czy istnieje sposób na znalezienie wszystkich zatwierdzeń, w których zmieniono nazwę określonego folderu? folder mógł się przenosić, więc wolałbym nie wyszukiwać, w jaki sposób i gdzie folder został przeniesiony ..
alpha_989
3
^^ Zaktualizowano, aby wyświetlał Atylko zmiany , zgodnie z żądaniem OP.
GoZoner
Co jeśli katalog został usunięty w bieżącym nagłówku?
Aaron Franke
34

jeśli chcesz zobaczyć to graficznie, możesz użyć

gitk -- foo/A

wprowadź opis zdjęcia tutaj

Reza
źródło
26

Możesz używać git logz nazwami ścieżek odpowiednich folderów:

git log A B

Dziennik pokaże tylko zatwierdzenia dokonane w Ai B. Zwykle wrzucam, --statżeby zrobić trochę ładniej, co pomaga w szybkich recenzjach.

Nick Tomlin
źródło
26

Wchodzić

git log .

z określonego katalogu, daje również commits w tym katalogu.

Nikhil Agarwal
źródło
4
Nie działało dla mnie .. Po wylądowaniu w określonym katalogu i podaniu dziennika git. dał mi wszystkie commity z roota.
AKS
1
Pracuje dla mnie. Za pomocą git bash
buckley
2

Do śledzenia zmian w folderze, do którego folder został przeniesiony, zacząłem używać:

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

Nie jest to idealne, ponieważ pobiera inne foldery o tej samej nazwie, ale jeśli jest unikalne, wydaje się, że działa.

Mafu Josh
źródło
0

Inne odpowiedzi pokazują tylko zmienione pliki.

git log -p DIRjest bardzo przydatny, jeśli potrzebujesz pełnej różnicy wszystkich zmienionych plików w określonym podkatalogu.

Przykład: pokaż wszystkie szczegółowe zmiany w określonym zakresie wersji

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.
źródło
1
Nie rozumiem, w jaki sposób ta odpowiedź odnosi się do pytania
Florian Leitgeb,