为什么单个文件的2个版本的Git diff是空的?

时间:2015-06-06 19:12:58

标签: git git-diff

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

我已经尝试了十几种变体,差异变得空洞。我不是在寻找工作或分阶段文件的差异。我在输出上编辑了路径,因此线条适合而不会包裹。

我正在使用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

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

2 个答案:

答案 0 :(得分:1)

您需要找到包含给定文件的最后两个提交 这些可能不是HEADHEAD~。如果yourFileHEADHEAD~未更改,则git diff不会返回任何内容。

完整的命令是:

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

使用:

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

答案 1 :(得分:0)

  

git diff HEAD~1..HEAD

HEAD~1..HEAD指定一次提交:HEADLose the dots