如何显示git repo的子目录的git log history?

ams*_*ams 199 git

让我们说我有一个看起来像这样的git repo.

foo/
  .git/
  A/
   ... big tree here
  B/
   ... big tree here
Run Code Online (Sandbox Code Playgroud)

有没有办法让git log只显示特定目录的日志消息.例如,我想查看提交仅在foo/A中触摸文件的内容?

GoZ*_*ner 217

从目录中foo/,使用

  git log -- A
Run Code Online (Sandbox Code Playgroud)

你需要' - ' <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
Run Code Online (Sandbox Code Playgroud)

  • 对于人们浏览,这显示了`A` _和_` B`的变化,而不仅仅是OP要求的'A` (22认同)
  • 如果当前头的目录被删除了怎么办? (2认同)

Rez*_*eza 30

如果你想以图形方式看到它,你可以使用

gitk -- foo/A
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Nic*_*lin 26

您可以使用git log相应文件夹的路径名:

git log A B

该日志仅显示在A和中生成的提交B.我通常--stat会让事情变得更漂亮,这有助于快速提交评论.


小智 20

输入

git log .

从特定目录,它还提供该目录中的提交.

  • 不适用于我..登陆特定目录并给出git log后。从根本上给了我所有的承诺。 (3认同)
  • 对我有用。使用 git bash (3认同)

Mat*_*s M 7

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

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
Run Code Online (Sandbox Code Playgroud)


Maf*_*osh 7

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

git rev-list --all --pretty=oneline -- "*/foo/subfoo/*"
Run Code Online (Sandbox Code Playgroud)

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