HEAD在Git中
这些符号是指什么,它们是什么意思?
(我在官方文档中找不到任何解释)
HEAD
(直接或间接,即符号)引用当前提交。 它是你在工作目录中检查的一个提交(除非你做了一些改变或者等效),它是一个提交,其中“git commit”会做出一个新提交。 通常HEAD
是对其他某个命名分支的符号引用; 这个分支目前被检出分支或当前分支。 HEAD
也可以直接指向提交; 这个状态被称为“detached HEAD”,可以理解为匿名分支。
从Git 1.8.5开始, @
就是HEAD
的捷径
ORIG_HEAD
是HEAD
先前状态,由具有可能危险行为的命令设置,以便于恢复它们。 Git有reflog的用处不大: HEAD@{1}
大致等于ORIG_HEAD
( HEAD@{1}
始终是HEAD
最后一个值, ORIG_HEAD
是危险操作前的HEAD
最后一个值)。
有关更多信息,请阅读git(1)联机帮助页,Git用户手册,Git社区书和Git词汇表
从git重置
“拉”或“合并”总是将当前分支的原始尖端留在ORIG_HEAD
。
git reset --hard ORIG_HEAD
重置难以将索引文件和工作树恢复到该状态,并将分支的尖端重置为该提交。
git reset --merge ORIG_HEAD
在检查合并的结果后,您可能会发现其他分支的变化不令人满意。 运行“ git reset --hard ORIG_HEAD
”可以让你回到你所在的位置,但它会放弃你不想要的本地修改。 “ git reset --merge
”保留你的本地修改。
在应用任何补丁之前,ORIG_HEAD被设置为当前分支的顶端。
如果您在多次提交时遇到问题,比如在错误的分支上运行' git am
',或者通过更改邮箱(例如“From:”行中的+错误)更容易修复提交中的错误,这很有用。
另外,合并总是将' .git/ORIG_HEAD
'设置为HEAD的原始状态,因此可以通过使用' git reset ORIG_HEAD
'来删除有问题的合并。
注意:从这里开始
HEAD是一个移动的指针。 有时它意味着当前的分支,有时它不是。
所以HEAD已经不是“当前分支”的同义词了。
HEAD在git中的任何地方都意味着“当前” ,但它并不一定意味着“当前分支”(即分离的HEAD)。
但它几乎总是意味着“当前的承诺”。
它是在“ git commit
”之上构建的,并且“ git diff --cached
”和“ git status
”进行比较。
它意味着当前分支仅在非常有限的情况下(正好当我们想要分支名称操作时 - 通过提交/ rebase /等重置和增加分支提示)。
Reflog是一种回归时间的机器,机器与“当前”概念有着有趣的互动。
HEAD@{5.minutes.ago}
可能意味着“取消引用HEAD symref来查明我们现在在哪个分支上,然后找出该分支的顶端在5分钟前的位置”。
或者,它可能意味着“我在5分钟前称之为HEAD的承诺是什么,例如,如果我那时做了”git show HEAD“。
git1.8.4(2013年7月)介绍了一种新的符号!
(实际上,2013年第四季度的版本为1.8.5或1.9:通过commit 9ba89f4重新引入)
不要输入四个大写字母“ HEAD
”,现在可以说“ @
”
例如“ git log @
”。
参见提交cdfd948
输入' HEAD
'是很乏味的,特别是当我们可以使用' @
'代替时。
选择' @
'的原因是,它自然遵循ref@op
语法(例如HEAD@{u}
),除了我们没有引用,没有操作,并且当我们没有这些时,它会使假设' HEAD
'。
所以现在我们可以使用' git show @~1
'以及所有这些好东西。
到目前为止,' @
'是一个有效的名称,但它与这个想法相冲突,所以让我们将其视为无效。 可能很少有人使用这个名字。
在1.8.4-rc3期间(2013年8月14日)发布的一篇博客文章宣布此功能已经恢复并推迟(谢谢Cupcake参加单挑)。
再一次,它被再次引入提交9ba89f4(2013年9月)。
参见提交2c2b664:
还原“为HEAD
添加新@
快捷键”
这将恢复提交cdfd948,因为它不仅适用于“ @
”(和应用了修饰符如@{u}
表单),还会影响例如“ refs/heads/@/foo
”,而不应该这样做。
提供简短的基本想法可能会很好,并且可以稍后重试该主题,但现在回过头来避免影响即将发布的现有用例。
我的理解是,HEAD指向当前分支,而ORIG_HEAD用于在执行“危险”操作之前存储之前的HEAD。
例如,git-rebase和git-am在应用任何更改之前记录分支的原始提示。
链接地址: http://www.djcxy.com/p/925.html上一篇: HEAD in Git