git:确定给定文件是否在修订散列 A 和 B 之间更改?

git: determine whether a given file changed between revision hashes A and B?

Git 中是否有一种简单的方法来确定给定文件是否在修订哈希 A 和 B 之间发生了变化?

我知道如果我可以确定修订散列 A' 和 B',我可以轻松地做到这一点,其中 A'=predchange(A, path) 和 B'=predchange(B, path),其中 predchange(X , path) 是给定路径发生更改的 X(或 X 本身)的最近父级。然后我只检查是否 A' == B'.

是的,您可以使用 git diff with a range

git diff HEAD^.. file.txt

如果您看到 less 是空的,则没有任何变化。

git diff [--stat] A..B -- path/to/file

对于--stat,它只显示更改的单行摘要。没有,它显示实际差异。

A..B 语法是一个修订范围。它扫描为 "All commits reachable from B, but not from A"。当您传递 revision range to diff 时,它会显示范围内所有提交的差异。 AB 是 "commitish" - SHA1 的标识提交、引用或标记、HEAD,或者任何前面结合特殊选择器的组合,例如 ^.

git diff <A> <B> -- <path> | wc -l

0 表示文件未更改。