我正在研究R package,它应该在粒度级别上解析git存储库历史记录。使用open source project from GitHub验证某些解析结果时,我遇到了意外情况。在我的包的先前验证工作中,我通过git log的输出正确地重建了几个git存储库中每个文件的行数,所以我认为使用git log
获取有关已更改文件的综合信息是一个有效的路径跟随。
但是,我在前面提到的project中发现了一个提交,其中git log似乎没有传达有关已更改文件的所有信息:使用哈希184f6c71dee03c66c7adaacb024b70d99075ea75
进行提交。将HEAD重置为此提交并同时运行git log --stat
和git show --log
时,我明白这一点:
$ git log --stat
commit 184f6c71dee03c66c7adaacb024b70d99075ea75
Merge: 32e47a3 d203300
Author: ***
Date: Wed Nov 12 10:39:51 2014 +0100
merge changes from master branch
commit d203300bbe45981dab15b49c3c08deb31ad46466
Merge: 4b63f4e c8ae895
Author: ***
Date: Wed Nov 12 10:35:36 2014 +0100
[ output truncated ]
commit 32e47a32f3cc60b5705e9df93cdc6b730fae380b
Author: ***
Date: Tue Nov 11 18:00:55 2014 +0100
Added the internal class template `MatrixColumnVisitor` to represent
`VectorVisitor` concept for a column that is a `matrix`. Part of #602
NEWS.md | 3 +++
inst/include/dplyr.h | 1 +
inst/include/dplyr/MatrixColumnVisitor.h | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
inst/include/dplyr/VectorVisitorImpl.h | 4 +++-
inst/include/dplyr/visitor.h | 17 ++++++++++++++---
inst/include/dplyr/white_list.h | 4 ++++
tests/testthat/test-filter.r | 12 ++++++++++++
7 files changed, 204 insertions(+), 4 deletions(-)
[ output truncated ]
和
$ git show --stat
commit 184f6c71dee03c66c7adaacb024b70d99075ea75
Merge: 32e47a3 d203300
Author: ***
Date: Wed Nov 12 10:39:51 2014 +0100
merge changes from master branch
NEWS.md | 4 ++--
R/RcppExports.R | 4 ++++
R/src-sql.r | 2 +-
inst/include/dplyr/NamedListAccumulator.h | 12 ++++++------
inst/include/dplyr/Result/LazyGroupedSubsets.h | 4 ++--
inst/include/dplyr/Result/LazySubsets.h | 4 ++--
inst/include/dplyr/Result/Name.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++
inst/include/dplyr/Result/all.h | 1 +
src/RcppExports.cpp | 15 +++++++++++++++
src/dplyr.cpp | 29 ++++++++---------------------
src/strings_addresses.cpp | 19 +++++++++++++++++++
tests/testthat/test-joins.r | 7 +++++++
tests/testthat/test-mutate.r | 18 ++++++++++++++++++
13 files changed, 131 insertions(+), 34 deletions(-)
这是令人惊讶的,因为我想
git log --stat
并且
git show --stat
给我相同的信息。
情况并非如此,因为从git log
输出,我得出的结论是,在感兴趣的提交中没有更改文件。
查看提交on GitHub或在RStudio git选项卡中,我可以看到此提交不为空,即显示git show
的信息似乎是正确的,在我看来有信息该提交的git log
缺少。
知道为什么会出现这种差异?正如所指出的,对于大量的提交,我可以从git log
正确地重现git存储库中每个文件的行数,但不适用于此。我在macOS上运行git 2.9.2。提前谢谢。
答案 0 :(得分:1)
默认情况下,git log
跳过显示合并提交的差异,而git show
显示合并提交的组合差异。将--cc
(显示组合差异)添加到git log
选项会告诉git log
显示合并的差异(或统计数据)。
请注意,组合差异的用途有限。要进行正确分析,您可能需要-m
,这是git log
和git show
都接受的选项。它告诉命令实际上将每个合并拆分为多个虚拟提交。合并提交具有 n 父项,其中n≥2,-m
使Git转为提交A与父母P1,P2,...,Pn 进入使用父P1提交A-P1;用父P2提交A-P2; ...;使用父Pn 提交A-Pn,然后单独显示(或--stat
)每个提交。