b/w 'git diff HEAD' 和 'git diff HEAD HEAD~1' 有什么区别?

What is the difference b/w 'git diff HEAD' and 'git diff HEAD HEAD~1'?

我是 git 的新手,谁能帮帮我。

git diff 可以进行两次修改并向您展示它们之间的差异。

HEAD 是指向当前分支最后一次提交的 ref。

git diff HEAD 将向您显示上次提交与尚未提交的内容之间的更改(与 git diff(无修订)相反,后者显示尚未提交的更改 staged(使用 git add,因此它们可以在之后提交))。

HEAD~1 是一个 special syntax,允许您 select HEAD 的第一个父级。提交通常只有一个父项(先前的提交),除非它们合并两个分支,在这种情况下,它们有一个父项用于先前的提交,另一个用于合并的分支。

请注意,HEAD 有一个 shorthand,因为它经常被使用。您可以使用相同的行为将其替换为 @git diff @git diff HEAD等同

对于 HEAD 语法

  • HEAD 是分支中的最新提交
  • HEAD~NHEAD
  • 的第 n 个旧提交

git diff HEAD 将向您显示当前内容与最近提交内容之间的差异
如果您已经暂存内容(git added,但尚未 commited)并且您还对未暂存的差异感兴趣 git diff(这将仅向您显示两者之间的差异),这将特别有用暂存提交状态和在它之上的变化)

git diff HEAD~1..HEAD 将显示当前分支上最新的和之前的之间的差异,忽略任何当前差异
这对于比较先前提交的范围很有用(以及像 git reset --soft HEAD~N 这样的语法,这将使分支的 HEAD~N 丢弃中间提交,但让它们暂存,就像你使用过一样git add)

git diff HEAD..HEAD~1 向您显示 HEAD~1..HEAD
的反向 这通常是一个错误,只是一个混乱的根源

$ git diff HEAD 最新提交与工作树之间的差异;

$ git diff HEAD HEAD~1 = $ git show 最新提交与最新提交之前的差异。

(顺便说一句,

$ git diff 工作树和索引之间的差异;

$ git diff --cached 最新提交与索引之间的差异。)