“ git diff”,“ git diff HEAD”和“ git diff --staged”的奇怪输出?

问题描述 投票:2回答:1

有3个主要的git diff版本:

  • git diff-工作目录STAGE
  • 之间的差异
  • git diff --staged-HEADSTAGE
  • 之间的差
  • git diff HEAD-HEAD工作目录
  • 之间的差

以上是我几乎在网上从各个地方找到的定义

我按以下顺序对3个文件执行了某些提交:

ce6f5bb (HEAD -> master) 6th commit, file1
c1c67da 5th commit, file3    
ea51776 4th commit, file1 file2    
001675b 3rd commit, file1 file2    
ec04f53 2nd commit, file2    
21cb6c1 1st commit, file1  

a。 file2 在工作目录中修改b。暂未提交任何内容c。 file1file3 未修改


我的查询是:

1。 git diff

    git diff
    diff --git a/file2.txt b/file2.txt
    index 21106bf..c755a1e 100644
    --- a/file2.txt
    +++ b/file2.txt
    @@ -1,3 +1,4 @@
     123
     345
     678
    +90.    

尽管分区域很空,为什么显示diff?


2。 git diff HEAD

    git diff
    diff --git a/file2.txt b/file2.txt
    index 21106bf..c755a1e 100644
    --- a/file2.txt
    +++ b/file2.txt
    @@ -1,3 +1,4 @@
     123
     345
     678
    +90.    

如果LAST COMMIT(HEAD)与file1有关,那么为什么显示file2的差异?HEAD根本不包含与file2相关的任何内容



现在添加文件后标记2

3。 git diff

它什么也没显示!((我假设只有在文件已暂存并且在工作目录中也进行了某些[[除]以外的更改]时,它才会显示diff)好吧,如果是这样,那么为什么1。中显示diff


4。 git diff --staged

git diff diff --git a/file2.txt b/file2.txt index 21106bf..c755a1e 100644 --- a/file2.txt +++ b/file2.txt @@ -1,3 +1,4 @@ 123 345 678 +90.

同样,如果HEAD指向文件1,那么为什么显示文件2的差异?



我在下面创建了此图像

((注:另一个场景。与上面不同)

对于git diff HEAD,我的猜测是

对于每个跟踪的文件

,HEAD将继续向后移动,直到找到提交的那个文件的最新版本,以便与工作目录中的那个进行比较
如果我们考虑以下新情况,那么对于git diff HEAD,是否低于我所假设的?

enter image description here

[有3个主要的git diff版本:git diff-工作目录与阶段之间的差异git diff --staged-HEAD与STAGE之间的差异git diff HEAD-差异...

git github version-control diff git-diff
1个回答
1
投票
您犯了一个基本错误,然后将此错误传播到您的各个命令中。
© www.soinside.com 2019 - 2024. All rights reserved.