“git diff HEAD” 和 “git diff HEAD HEAD~1” 有什么区别?

6

我对git还比较陌生,能否有人帮帮我。

  • 其实我卡在了"git diff HEAD"是什么意思。
  • "git diff HEAD"和"git diff HEAD HEAD~1"有什么不同?
3个回答

8

git diff可以比较两个版本之间的差异。

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

git diff HEAD将显示最后一次提交与尚未提交的更改(与git diff(没有修订版本)相对应,后者显示了尚未进行暂存的更改(使用git add,以便稍后提交))。

HEAD~1是一个特殊语法,允许您选择HEAD的第一个父提交。提交通常有单个父提交(上一个提交),除非它们合并了两个分支,此时它们有一个父提交作为上一个提交,并且另一个父提交作为合并的分支。

请注意,由于HEAD经常使用,因此有一种简写方式。您可以用具有相同行为的@替换它。git diff @git diff HEAD等效。


2

对于HEAD语法

  • HEAD是分支中最新的提交
  • HEAD~N是从HEAD往前数第N个提交

git diff HEAD将显示当前内容与最近提交之间的差异
如果您已经准备好提交(使用了git add但尚未commit),并且您还对未暂存的差异感兴趣,那么这将非常有用。使用git diff(它只会显示暂存提交状态和其上方更改之间的差异)

git diff HEAD~1..HEAD将显示当前分支上最近提交及其上一个提交之间的差异,忽略任何当前差异
这对于比较以前提交的范围非常有用(使用类似git reset --soft HEAD~N的语法,可以将分支的HEAD移动到~N处,丢弃中间提交,但保留它们作为暂存状态,就像使用了git add一样)

git diff HEAD..HEAD~1显示的是HEAD~1..HEAD的相反结果
这通常是一个错误,只会引起混淆


它是HEAD,不是head。如果你使用head,我认为git将无法接受它。 - eftshift0
@eftshift0 哇,谢谢/已修复 - 在OSX下从brew安装的git并不介意,而且在过去几年中我从未有过需要测试是否总是这种情况,但当我进行测试时似乎确实很重要,并且行为是可以预测的由于奇怪的OSX文件系统 - ti7
我猜这与git无关。Git确实很在意,但存储库所在的文件系统并不在意。但是我大部分时间都在Linux上工作,所以我知道它们并不相同。 - eftshift0

0

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

$ git diff HEAD HEAD~1 = $ git show 显示最新提交与上一个提交之间的差异。

(顺便提一句,

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接