Jak*_*ski 299
HEAD
是(直接或间接的,即符号的)对当前提交的引用.它是您在工作目录中检查的提交(除非您进行了一些更改或等效),并且它是一个提交,其中"git commit"将创建一个新提交.通常HEAD
是对其他一些命名分支的符号引用; 此分支当前已检出分支或当前分支.HEAD
也可以直接指向提交; 这个状态被称为"分离的HEAD",可以理解为在未命名的匿名分支上.
而@
单是一个捷径HEAD
,因为Git的1.8.5
ORIG_HEAD
是HEAD
由具有可能危险行为的命令设置的先前状态,以便于还原它们.现在Git具有reflog是不太有用的:HEAD@{1}
大致相当于ORIG_HEAD
(HEAD@{1}
总是最后一个值HEAD
,ORIG_HEAD
是HEAD
危险操作之前的最后一个值).
有关更多信息,请阅读git(1)联机帮助页,Git用户手册,Git社区书和Git词汇表
Von*_*onC 97
"pull"或"merge"总是留下当前分支的原始尖端
ORIG_HEAD
.
git reset --hard ORIG_HEAD
Run Code Online (Sandbox Code Playgroud)
难以重置它会将索引文件和工作树恢复到该状态,并将分支的提示重置为该提交.
git reset --merge ORIG_HEAD
Run Code Online (Sandbox Code Playgroud)
检查合并结果后,您可能会发现另一个分支的更改不能令人满意.运行"
git reset --hard ORIG_HEAD
"会让你回到原来的位置,但它会丢弃你不想要的本地更改."git reset --merge
"保留您当地的变化.
在应用任何补丁之前,ORIG_HEAD设置为当前分支的尖端.
如果您在多次提交时遇到问题,例如git am
在错误的分支上运行' '或者通过更改邮箱更容易修复的提交中的错误(例如"From:"行中的+错误),这将非常有用.此外,merge始终将'
.git/ORIG_HEAD
' 设置为HEAD的原始状态,因此可以使用'git reset ORIG_HEAD
' 删除有问题的合并.
注意:从这里开始
HEAD是一个移动指针.有时它意味着当前的分支,有时它不是.
因此HEAD 不是所有地方"当前分支"的同义词.
HEAD 在git中意味着"当前",但它并不一定意味着"当前分支"(即分离的HEAD).
但它几乎总是意味着"当前的提交".
它是提交"git commit
"构建在顶部,"git diff --cached
"和"git status
"比较.
它仅在非常有限的上下文中表示当前分支(当我们希望分支名称操作时 - 通过commit/rebase /等重置和增长分支提示).Reflog是一种可以追溯到时间和机器与"当前"概念进行有趣互动的工具.
HEAD@{5.minutes.ago}
可能意味着"取消引用HEAD symref来找出我们现在在哪个分支,然后找出该分支的尖端在5分钟前的位置".
或者它可能意味着"我在5分钟前称为HEAD的提交是什么,例如,如果我做了"git show HEAD",那么".
git1.8.4(2013年7月) 介绍 介绍了一种新的符号!
(实际上,它将是1.8.5或1.9,2013年第四季度:通过提交9ba89f4重新引入)
而不是键入四个大写字母"
HEAD
",你可以说"@
"现在,
例如"git log @
".
打字'
HEAD
'很乏味,特别是当我们可以使用'@
'时.选择'
@
' 的原因在于它自然地遵循ref@op
语法(例如HEAD@{u}
),除了我们没有ref,没有操作,当我们没有那些时,它会让人觉得'HEAD
'.所以现在我们可以使用'
git show @~1
',以及所有美好的善良.直到现在'
@
'是一个有效的名字,但它与这个想法相冲突,所以让它变得无效.可能很少有人使用这个名字,如果有的话.
一个在1.8.4-RC3期博客文章(14日,2013年8月)宣布,该功能被恢复和延迟(谢谢你的蛋糕的抬头).
同样,它再次引入 提交9ba89f4(2013年9月).
请参阅commit 2c2b664:
@
快捷方式HEAD
"这会恢复提交cdfd948,因为它不仅适用于"
@
"(以及带有@{u}
应用于它的修饰符的表单),还会影响例如"refs/heads/@/foo
",它不应该.给出一个简短的手的基本想法可能是好的,主题可以在以后重试,但让我们回过头来避免影响即将发布的现有用例.
HEAD 命名工作树中的更改所基于的提交。FETCH_HEAD 记录您使用上次 git fetch 调用从远程存储库获取的分支。ORIG_HEAD 是由剧烈移动 HEAD 的命令创建的,用于记录操作前 HEAD 的位置,以便您可以轻松地将分支的尖端更改回运行它们之前的状态。MERGE_HEAD 记录运行 git merge 时要合并到分支中的提交。CHERRY_PICK_HEAD 记录您在运行 gitcherry-pick 时选择的提交。