我对git还比较陌生,能否有人帮帮我。
- 其实我卡在了"git diff HEAD"是什么意思。
- "git diff HEAD"和"git diff HEAD HEAD~1"有什么不同?
git diff可以比较两个版本之间的差异。
HEAD
是一个指向当前分支最后一次提交的引用。
git diff HEAD
将显示最后一次提交与尚未提交的更改(与git diff
(没有修订版本)相对应,后者显示了尚未进行暂存的更改(使用git add
,以便稍后提交))。
HEAD~1
是一个特殊语法,允许您选择HEAD
的第一个父提交。提交通常有单个父提交(上一个提交),除非它们合并了两个分支,此时它们有一个父提交作为上一个提交,并且另一个父提交作为合并的分支。
请注意,由于HEAD
经常使用,因此有一种简写方式。您可以用具有相同行为的@
替换它。git diff @
与git diff HEAD
等效。
对于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
的相反结果
这通常是一个错误,只会引起混淆
$ git diff HEAD
显示最新提交与工作树之间的差异;
$ git diff HEAD HEAD~1
= $ git show
显示最新提交与上一个提交之间的差异。
(顺便提一句,
$ git diff
显示工作树和索引之间的差异;
$ git diff --cached
显示最新提交与索引之间的差异。)
HEAD
,不是head
。如果你使用head
,我认为git将无法接受它。 - eftshift0git
并不介意,而且在过去几年中我从未有过需要测试是否总是这种情况,但当我进行测试时似乎确实很重要,并且行为是可以预测的由于奇怪的OSX文件系统。 - ti7