如何显示Git存储库子目录的Git日志历史(即所有相关的提交)

让我们假设我有一个Git存储库,看起来像这样:

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

有没有一种方法让git log只显示特定目录的日志消息?例如,我想看看在foo /中只提交了哪些被触摸的文件。

184812 次浏览

你可以将git log与相应文件夹的路径名一起使用:

git log A B

该日志将只显示在AB中进行的提交。我通常会加入--stat来让事情看起来更漂亮一些,这有助于快速提交审查。

从目录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

如果你想图形化地查看它,你可以使用gitk:

gitk -- foo/A

Enter image description here

输入

git log .

从特定的目录。它还提供了该目录下的提交。

其他答案只显示更改的文件。

git log -p DIR非常有用,如果你需要特定子目录中所有更改文件的完整的差异

示例:显示特定版本范围内的所有详细更改

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

为了跟踪文件夹移动的文件夹的更改,我开始使用:

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

这并不完美,因为它会抓取其他具有相同名称的文件夹,但如果它是唯一的,那么它似乎可以工作。