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

Предположим, что у меня есть репозиторий git, который выглядит так.

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

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

Ответ 1

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

  git log -- A

Вам нужно '-', чтобы отделить <path>.. от ссылок <since>..<until>.

# 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

Ответ 2

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

git log A B

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

Ответ 3

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

gitk -- foo/A

enter image description here

Ответ 4

Введите

git log .

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

Ответ 5

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

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

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

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

Ответ 6

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

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

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