Git中的HEAD和ORIG_HEAD

这些符号指的是什么?它们的意思是什么?

(我在官方文件中找不到任何解释)

119759 次浏览

git重置

“pull"或“;merge"总是在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:&;行). < / p >

此外,merge总是将'.git/ORIG_HEAD'设置为HEAD的原始状态,因此可以使用'git reset ORIG_HEAD'来删除有问题的merge。


注:来自在这里

HEAD是一个移动指针。有时是指当前的分支,有时不是。

所以HEAD是,是“当前分支”的同义词;已经无处不在。

HEAD在git中的意思是“current"到处都是,但它并不一定意味着“当前分支”;(即分离的头部)。

但它几乎总是指“当前的承诺”。
它是commit &;git commit"git diff --cached"和“;git status"比较反对。
它表示当前分支仅在非常有限的上下文中(恰好在我们需要分支的时候) 要操作的名称——通过commit/rebase/etc来重置和增长分支尖端)

Reflog是一个回到过去的交通工具,时间机器与“当前”的概念有有趣的互动。

HEAD@{5.minutes.ago}可以表示“解引用HEAD符号以找出我们现在在哪个分支上,然后找出5分钟前该分支的顶端在哪里”。
或者,它也可以是“我将在HEAD 5中提到的commit是什么? 例如,如果我做了“git show head”;then" . < / p >


git1.8.4(2013年7月) 介绍了 介绍了一个新的符号!
(实际上,它将在1.8.5,Q4 2013:通过提交9 ba89f4重新引入),由< >强费利佩孔特雷拉斯< / >强.

不用输入四个大写字母&;__abc0 &;,你可以说&;现在,
例如“git log @" . < / p >

看到提交cdfd948

输入'HEAD'很乏味,特别是当我们可以使用'@'时。

选择'@'的原因是它自然地遵循ref@op语法(例如HEAD@{u}),除非我们没有引用,也没有操作,而当我们没有这些时,假设'HEAD'是有意义的。

所以现在我们可以使用'git show @~1',以及所有的好东西。

到目前为止,'@'是一个有效的名称,但它与这个想法冲突,所以让我们让它无效。可能很少有人,如果有的话,使用这个名字。

我的理解是HEAD指向当前分支,而ORIG_HEAD用于在执行“危险”操作之前存储前一个HEAD。

例如,git-rebase和git-am在应用任何更改之前都会记录分支的原始提示。

HEAD是(直接或间接,即符号)对当前提交的引用。它是你在工作目录中检查过的一个提交(除非你做了一些更改,或类似的更改),并且它是一个“;git commit"会造一个新的。通常HEAD是对其他已命名分支的符号引用;这个分支是当前签出的分支,或者当前的分支。HEAD也可以直接指向一个提交;这种状态被称为“分离头”,可以理解为处于未命名的、匿名的分支上。

@单独是HEAD的快捷方式,因为Git 1.8.5

ORIG_HEADHEAD的前一个状态,由可能有危险行为的命令设置,以便于恢复它们。现在Git有了reflog,它就不那么有用了:HEAD@{1}大致相当于ORIG_HEAD (HEAD@{1}总是HEAD的最后一个值,ORIG_HEAD是危险操作之前HEAD的最后一个值)。

有关更多信息,请阅读git(1)从 / [gitrevisions(7) manpage][git-revisions], Git用户手册Git社区手册Git Glossary

From man 7 gitrevisions:

属性中的更改所基于的提交的名称 工作树。FETCH_HEAD记录您获取的分支 从远程存储库与您的最后一个git获取调用。 文件中移动HEAD的命令创建ORIG_HEAD 激烈的方式,要记录头部的位置之前他们 操作,使您可以轻松更改树枝的尖端 back to the state before you ran them. MERGE_HEAD records the 当你运行时,提交你要合并到分支中的一个或多个分支 git合并。CHERRY_PICK_HEAD记录提交 当你运行git cherry-pick.