这些git diff命令有什么区别?

Mat*_*kin 52 git git-diff

以下git命令有什么区别?

  1. git diff HEAD
  2. git diff HEAD^
  3. git diff --cached 或同义词 git diff --staged
  4. git diff

Amb*_*ber 115

  1. git diff HEAD - 显示自上次提交以来发生的变化.
  2. git diff HEAD^- 显示自最近一次提交之前提交以来发生的更改.
  3. git diff --cached- 显示已添加到索引git add但尚未提交的内容.
  4. git diff- 显示已更改但尚未添加到索引的内容git add.

它看起来像这样:

     Working
    Directory  <----+--------+------+
        |           |        |      |    
        |           |        |      |
        V           |        |      |    
    "git add"       |        |      |    
        |         diff       |      |    
        |           |        |      |    
        V           |        |      |    
     Index     <----+    diff HEAD  |            
        |           |        |      |       
        |           |        |      |
        V           |        |      |       
  "git commit"      |        |      |
        |     diff --cached  |      |
        |     diff --staged  |      |
        V           |        |      |
      HEAD     <----+--------+      |
        |                           |
        |                        diff HEAD^
        V                           |
previous "git commit"               |
        |                           |
        |                           |
        V                           |
      HEAD^    <--------------------+
Run Code Online (Sandbox Code Playgroud)

  • 单独为ascii-art +1.一张图片= 1000字; 一个ascii-art = 1025个字符. (15认同)

Mat*_*kin 10

来自Git社区书籍:

git diff

将显示工作目录中尚未为下一次提交暂存的更改.

git diff --cached

将显示索引与上次提交之间的区别; 如果你在没有"-a"选项的情况下运行"git commit",你会提交什么.

git diff HEAD

显示自上次提交以来工作目录中的更改; 如果你运行"git commit -a",你会提交什么.


wRA*_*RAR 9

  1. git diff HEAD :HEAD和工作目录之间的差异.
  2. git diff HEAD^ :HEAD的直接祖先和工作目录之间的差异.
  3. git diff --cached或同义词git diff --staged:HEAD和索引之间的差异.
  4. git diff :索引和工作目录之间的差异.

  • 有没有人有一个很好的方法来记住这个?我一直回到这里. (4认同)

小智 5

这是记住这些命令的简单方法:

  • 默认情况下,git diff的源假定为工作目录,其目标为索引。
  • 添加--cached标志会将源更改为索引。添加更多参数后,它不一定会更改目标。但是为了方便起见,如果未提供目标,则目标将成为最后的提交。
  • 添加提交作为参数会更改目标。
  • 添加两个提交作为参数会分别更改源和目​​标。

玩得开心,将它们混合在一起以达到自己的喜好:)