HEAD和ORIG_HEAD在Git中
这些符号是指什么,它们是什么意思?
(在官方文档中我找不到任何解释)
HEAD
(直接或间接,即符号)引用当前提交。 这是你在工作目录中检查的一个提交(除非你做了一些修改或者等价的),它是一个提交,在这个提交之上,“git commit”会创build一个新的。 HEAD
通常是其他命名分支的符号引用; 这个分支目前是检出分支,或当前分支。 HEAD
也可以直接指向提交; 这个状态被称为“脱离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)。
但是它几乎总是意味着“当前的承诺”。
它是build立在“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重新引入)
不要input四个大写字母“
HEAD
”,现在可以说“@
”
例如“git log @
”。
见提交cdfd948
input'
HEAD
'是很乏味的,特别是当我们可以使用'@
'时。select'
@
'的原因是它自然地来自ref@op
语法(例如HEAD@{u}
),除了我们没有引用,没有操作,并且当我们没有这些时,假设“HEAD
”。所以现在我们可以使用'
git show @~1
'以及所有这些好东西。到目前为止,“
@
”是一个有效的名字,但是与这个想法相冲突,所以让我们把它变成无效的。 如果有的话,可能很less有人使用这个名字。
在1.8.4-rc3期间 (2013年8月14日)的博客文章宣布此function已经恢复并推迟(谢谢杯形蛋糕提醒 )。
再一次,它被再次引入提交9ba89f4 (2013年9月)。
参见提交2c2b664 :
还原“添加@
HEAD
快捷键”
这将恢复提交cdfd948 ,因为它不仅适用于“
@
”(和应用了修饰符如@{u}
表单),还会影响例如“refs/heads/@/foo
”,而不应该这样做。短暂的基本思想可能是好的,这个话题可以稍后重试,但是为了避免影响到现在的即将到来的版本的现有用例,让我们来回顾一下。
我的理解是HEAD指向当前分支,而ORIG_HEAD用于在执行“危险”操作之前存储之前的HEAD。
例如git-rebase和git-am在应用任何更改之前logging分支的原始提示。