一次版本回退后,在历史记录里面看到了这样一张图:

master和dev指针指向的是本地的master分支和dev分支,origin/master和origin/dev指向的是远程仓库的master分支和dev分支,这个很好理解。

HEAD指针代表当前工作路径,HEAD与master指向同一id说明当前处在master分支,这个也不难理解。

关键是ORIG_HEAD指针是个什么东西?翻了翻官方的说明文档,没有发现对这个指针的说明。

搜索了一下,略微明白了一点。

针对某些危险操作,Git通过记录HEAD指针的上次所在的位置ORIG_HEAD提供了回退的功能。当你发现某些操作失误了,比如错误的reset到了一个很早很早的版本,可以使用git reset --hard ORIG_HEAD回退到上一次reset之前。

Git在1.8.5版本之后,加入了HEAD@{}功能,它通过一个链表记录HEAD的移动路径。

输入$ git reflog,结果类似于:

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
d628164 HEAD@{1}: commit: xxx
ea34578 HEAD@{2}: commit: xxxx
cb926e7 HEAD@{3}: commit: xxxx

每一次移动HEAD指针,Git都会将移动的路径通过链表串起来,链表头部的HEAD@{0}即HEAD指针。

但是HEAD@{1}并不一定是ORIG_HEAD!注意到,ORIG_HEAD仅仅是当进行危险操作(比如merge)时才会变更为HEAD指针的原值,而HEAD@{}链表则记录了每次HEAD的移动(包括commit)。

考虑以下情况:

  • 1.commit -> 2.merge -> 3.commit

此时,HEAD@{0}、HEAD@{1}、HEAD@{2}分别指向3、2、1,而ORIG_HEAD指向的是1而非2。

显然,有了reflog命令后HEAD链表比不知道什么变过的ORIG_HEAD更好用,因此如果你使用的是1.8.5版本之后的Git,推荐使用HEAD{}链表来代替ORIG_HEAD指针。

本文首发http://www.dss886.com,转载请注明

Git中HEAD和ORIG_HEAD指针指的是什么相关推荐

  1. git中“我们的”和“他们的”的确切含义是什么?

    本文翻译自:What is the precise meaning of "ours" and "theirs" in git? This might soun ...

  2. python中的列表是指针吗_Python中的指针——到底指什么(二)

    在 Python中的指针--到底指什么(一) 中,我们知道在Python的一切都是对象,变量其实是指向PyObject对象的名称,对不可变变量进行操作后,名称指向了另一个PyObject. 扣留对象 ...

  3. 【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况

    上一篇文章学习了GIT中commit.tree和blob三个对象之间的关系,点击链接查看:[Git.GitHub.GitLab]六 GIT中commit.tree和blob三个对象之间的关系 文章目录 ...

  4. git 移动分支指针_理解git 中的HEAD指针branch指针

    HEAD指针 使用git checkout 来移动HEAD指针,移动的对象可以是分支指针也可以是快照. HEAD指针可以指向快照也可以指向branch.当指向branch时提交后会和branch指针一 ...

  5. git reset 怎么还原_如何在Git中重置、恢复,返回到以前的状态

    编辑推荐: 本文来自51cto,在本文中,我们将带你了解如何去重置.恢复和完全回到以前的状态,做到这些只需要几个简单而优雅的 Git 命令. 用简洁而优雅的 Git 命令撤销仓库中的改变. 使用 Gi ...

  6. 如何撤消Git中的最新本地提交?

    我不小心将错误的文件提交给Git ,但是我还没有将提交推送到服务器. 如何撤消本地存储库中的那些提交? #1楼 我想撤消我们共享存储库中的最新五次提交. 我查找了要回滚的修订版ID. 然后我输入以下内 ...

  7. 在Git中,HEAD,工作树和索引之间有什么区别?

    有人能告诉我在Git中HEAD,工作树和索引之间的区别吗? 据我所知,它们都是不同分支的名称. 我的假设是否正确? 编辑 我找到了这个 单个git存储库可以跟踪任意数量的分支,但是您的工作树只与其中一 ...

  8. Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13

    Git 中的对象模型和文件的详细视图 文章目录 Git 中的对象模型和文件的详细视图 初始状态 编辑一个文件之后 暂存文件后 提交之后 参考资料 本文将用几幅图来可视化一个叫 file1的文件从修改到 ...

  9. C++中引用传递与指针传递区别(进一步整理)

    C++中引用传递与指针传递区别(进一步整理) 博客分类: C/C++ CC++C#J#  从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变 ...

  10. git 列出标签_Git标签介绍:如何在Git中列出,创建,删除和显示标签

    git 列出标签 Tagging lets developers mark important checkpoints in the course of their projects' develop ...

最新文章

  1. 基于 SpringBoot 的仿豆瓣平台【源码分享】
  2. OpenCV 透视变换
  3. 保存一波集合框架的介绍
  4. Android 串口开发——粘包解决方法,定时查询心跳数据,解析心跳数据。——持续更新中
  5. (37)System Verilog类外方法示例
  6. Codeforces 990G 点分治+暴力
  7. [转载]MySQL事务隔离级别
  8. J2ME-CLDC/MIDP资源
  9. win10等系统安装Pads安装步骤及软件卡死问题解决
  10. 中国(龙港)首届 “港为人先”全球创新创业大赛
  11. ubuntu vscode c++生成so及调用调试so包
  12. 颜值是第一生产力 - Windows Terminal
  13. 磐石云服务器_超牛的盘石云服务器平台
  14. linux——signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTRAP、SIGABRT...........................)
  15. 多源异构数据整合在多规合一中的应用
  16. 电源管理芯片的电路结构与分析
  17. failed to push some refs to 'git@xxx.xxx.xxx.xxx:finger-shoot/shoot-admin.git'
  18. HashSet和HashMap
  19. python获取2020年国家统计局省市县三级数据
  20. CAM350 V10.5/V14.6 导出拼板gerber文件

热门文章

  1. dataBinding 配置问题 Could not find method buildFeatures()for arguments xxx on extension ‘android
  2. 非聚集索引中的临界点(Tipping Point)
  3. Gmail企业邮箱在用OUTLOK或FOXMAIL有时出现密码错误的解决办法
  4. 看完书就忘,怎么办?告诉你六种方法(转载)
  5. 2019年安徽百所高校百万大学生科普创意创新大赛作品
  6. Cesium中获取坐标点地形高程的方法
  7. ​​欧洲能源危机日益严重,这个冬天到底会有多 “冷” ?
  8. duck duck go VS Google
  9. 近年来的Java面试题汇总。帮你圆大厂梦。
  10. lookup无序查找_excel无序查询 使用LOOKUP函数实现无序查询