Git diff HEAD vs --staged

vhd*_*vhd 62 git

git diff HEAD和之间有什么区别git diff --staged?我试过两个,但两个给出相同的输出.

Car*_*rós 90

假设此输出为git status:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   y
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   x
#
Run Code Online (Sandbox Code Playgroud)

如您所见,有一个文件已修改但未暂存以进行提交,并且添加了一个准备提交的新文件.

git diff --staged 将仅显示"暂存"区域中文件的更改.

git diff HEAD将显示所跟踪文件的所有更改.如果您已为提交暂存所有更改,则两个命令都将输出相同的内容.

  • @CarlosCampderrós哦,是的,只要您指定文件,就会区分其暂存版本和非暂存版本。 (2认同)

Pre*_*raj 25

  • git diff 查看Stage和Working Directory之间的区别
  • git diff --staged 查看HEAD和Stage之间的区别
  • git diff HEAD 查看HEAD和工作目录之间的区别

在此输入图像描述
img src

在此输入图像描述 在此输入图像描述
img src

  • origin 指的是克隆它的源存储库.
  • HEAD 是对当前签出分支中最后一次提交的引用.
  • 分阶段和索引都是相同的
  • 我们的工作目录中存在未分级的更改,但Git尚未将其记录到其版本历史记录中.
  • 分阶段更改很像非分阶段更改,除了它们已被标记为在下次运行git commit时提交

  • 顶部图形对我很有帮助.较低的图形不是那么多. (6认同)
  • @creativemateriel 我认为使用了 TikZ:https://www.overleaf.com/learn/latex/TikZ_package (2认同)

Von*_*onC 6

你将能够更容易地看到两个差异与上升之间的区别(Git 2.3.4 +,2015年第2季度) git status -v -v

犯4055500迈克尔·格鲁伯Ĵmjg,它很好地解释之间的区别git diff HEADgit diff --staged:

commit/ status:显示index-worktree diff-v -v

git commit并且git status以长格式显示给定时HEAD和索引之间的差异-v.这允许预览提交.

他们还列出了带有非分段更改的跟踪文件,但没有差异.

介绍" -v -v"示出的索引和worktree之间的差异除了HEAD索引DIFF.这允许查看提交中可能缺少的未分级更改.

在' -v -v' 的情况下,额外的标题行

Changes to be committed:
# and
Changes not staged for commit:
Run Code Online (Sandbox Code Playgroud)

在差异之前插入,与状态部分中的差异相等; 后者之前是50*" -",以使其更加突出.