Как показать историю журнала git для подкаталога репозитория git?

228

Допустим, у меня есть git-репо, которое выглядит так.

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

Есть ли способ попросить git log показывать только сообщения журнала для определенного каталога. Например, я хочу увидеть, что фиксирует файлы, к которым обращаются, только в foo / A?

военно-картографическая служба
источник

Ответы:

242

Из каталога foo/используйте

  git log -- A

Вам нужно '-' отделить <path>..от <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
источник
1
кстати, вы должны оставаться в папке «foo», прежде чем делать «git log - A B»
Сергей Лейко
22
Для людей, читающих чтение, это показывает изменения, A и B не только так, Aкак запросил OP
aidan
1
@ GoZoner, есть ли способ найти все коммиты, где было изменено определенное имя папки? папка могла перемещаться, поэтому я бы предпочел не
выискивать,
3
^^ Обновлено, чтобы показывать изменения Aтолько по запросу OP.
GoZoner
Что если каталог был удален в текущем заголовке?
Аарон Франке
34

если вы хотите увидеть это графически, вы можете использовать

gitk -- foo/A

введите описание изображения здесь

Реза
источник
26

Вы можете использовать git logс путями из соответствующих папок:

git log A B

В журнале будут показаны только коммиты, сделанные в Aи B. Я обычно добавляю, --statчтобы сделать вещи немного красивее, что помогает для быстрых обзоров коммитов.

Ник Томлин
источник
26

Войти

git log .

из определенного каталога, он также дает коммиты в этом каталоге.

Нихил Агарвал
источник
4
Не работает для меня .. После посадки в конкретный каталог и выдачи журнала Git. дал мне все коммиты от root.
AKS
1
Работает для меня. Использование git bash
buckley
2

Для отслеживания изменений в папке, куда эта папка была перемещена, я начал использовать:

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

Это не идеально, поскольку оно будет захватывать другие папки с тем же именем, но если оно уникально, то, похоже, оно работает.

Мафу Джош
источник
0

Другие ответы показывают только измененные файлы.

git log -p DIRочень полезно, если вам нужен полный diff всех измененных файлов в определенном подкаталоге.

Пример: Показать все подробные изменения в определенном диапазоне версий

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
Матиас М
источник
1
Я не понимаю, как этот ответ относится к вопросу
Флориан Лейтгеб