为什么Git diff of 2 versions of single file 是空的?

Why Git diff of 2 versions of a single file is empty?

我正在尝试查找文件的两个版本之间的 git 差异。 我不想使用 SHA。

我已经尝试了十几种变体,diff 是空的。我不是在寻找与工作文件或暂存文件的差异。我编辑了输出中的路径,因此该行无需换行即可适合。

我正在使用 posh-git powershell。

文件存在的证据如下:

ls src/G01/P001_MultiplesOf3And5.java

Directory: U:\dev\workspace\ProjectEuler\src\G01


Mode                LastWriteTime     Length Name  
----                -------------     ------ ----  
-a---         5/24/2015   7:38 AM       1612 P001_MultiplesOf3And5.java

这是我正在尝试做的事情:

U: git diff HEAD~1..HEAD src/G01/P001_MultiplesOf3And5.java

U: git diff HEAD~1..HEAD -- src/G01/P001_MultiplesOf3And5.java

U: 

我读到这应该有效:git diff $start_commit..$end_commit -- path/to/file

你可以看到 diff 是空的。有什么想法吗?

您需要找到确实包含给定文件的最后两个提交。
这些可能不是 HEADHEAD~。如果 yourFileHEADHEAD~ 中没有变化,那么 git diff returns 什么都没有。

完整的命令是:

 git diff $(git log -n2 --pretty=format:%H -- yourFile | awk '{print }' | tac) -- yourFile

有:

  • git log -n2 --pretty=format:%H -- yourFile:将获得最后 2 次提交
  • awk '{print }':确保每行打印一个
  • tac:反转顺序(最旧的提交,然后是最新的)
  • git diff $(...) -- yourFile:使用相关提交 SHA1 对 yourFile 进行比较。

git diff HEAD~1..HEAD

HEAD~1..HEAD 指定单个提交:HEADLose the dots.