Git:DETACHED HEAD的概念

栏目: 编程工具 · 发布时间: 6年前

内容简介:在上面是一个常见的例子,三个提交,这个时候我们需要重新检出

git 使用的时候,经常会碰到 DETACHED HEAD ,在此总结一下。

正文

HEAD normally refers to a named branch (e.g. master). Meanwhile, each branch refers to a specific commit. Let’s look at a repo with three commits, one of them tagged, and with branch master checked out:
	   HEAD (refers to branch 'master')
	    |
	    v
a---b---c  branch 'master' (refers to commit 'c')
    ^
    |
  tag 'v2.0' (refers to commit 'b')

上面是一个常见的例子,三个提交, HEAD 指针指向 c ,往往是这个分支上最后的提交。然后又进行了一次修改和提交,生成了 d

$ edit; git add; git commit

	       HEAD (refers to branch 'master')
		    |
		    v
a---b---c---d  branch 'master' (refers to commit 'd')
    ^
    |
  tag 'v2.0' (refers to commit 'b')

这个时候我们需要重新检出 v2.0 版本(这种可能性是很大,经常容易出现的),如下:

$ git checkout v2.0  # or
$ git checkout master^^
   HEAD (refers to commit 'b')
    |
    v
a---b---c---d  branch 'master' (refers to commit 'd')
    ^
    |
  tag 'v2.0' (refers to commit 'b')

这个时候 HEAD 指针就指向了 b ,这就是 detached HEAD 状态,这意味着 HEAD 指向了某一个提交了,而不再指向当前分支的最后一个提交了。

然后我们又进行了一次提交,就会变成这样:

$ edit; git add; git commit

     HEAD (refers to commit 'e')
      |
      v
      e
     /
a---b---c---d  branch 'master' (refers to commit 'd')
    ^
    |
  tag 'v2.0' (refers to commit 'b')

one more time,再来一次:

$ edit; git add; git commit
	 HEAD (refers to commit 'f')
	  |
	  v
      e---f
     /
a---b---c---d  branch 'master' (refers to commit 'd')
    ^
    |
  tag 'v2.0' (refers to commit 'b')

我们可以做任何正常的 git 操作,如果你想回到 master 分支,那么。

$ git checkout master

	       HEAD (refers to branch 'master')
      e---f     |
     /          v
a---b---c---d  branch 'master' (refers to commit 'd')
    ^
    |
  tag 'v2.0' (refers to commit 'b')

这个时候要意识到没有指针指向 f 提交,最后 ef 都会被常规的Git垃圾回收所删除掉,除非我们创建一个指针,例如:

$ git checkout -b foo   (1)
$ git branch foo        (2)
$ git tag foo           (3)
  1. 创建了一个新的分支指向 f ,并且更新了 HEAD 指针,这样 HEAD 指针就不再是 detached 状态了
  2. 简单创建了一个新的分支指向 f ,这个时候 HEAD 指针仍然是 detached 状态。
    3.创建了一个新 tag ,指向 f ,这个时候 HEAD 指针仍然是 detached 状态。

If we have moved away from commit f, then we must first recover its object name (typically by using git reflog), and then we can create a reference to it. For example, to see the last two commits to which HEAD referred, we can use either of these commands:

如果 f 已经被移除了,我们首先需要恢复它的对象名,使用 git reflog ,然后我们创建一个指针指向它。例如,想看到 HEAD 之前的最后两个提交,我们可以使用下面的命令(二选一):

$ git reflog -2 HEAD # or
$ git log -g -2 HEAD

总结

这篇总结基本上还是以翻译为主,留了一个问题,就是 reflog


以上所述就是小编给大家介绍的《Git:DETACHED HEAD的概念》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

ES6 标准入门(第2版)

ES6 标准入门(第2版)

阮一峰 / 电子工业出版社 / 2016-1 / 69.00元

ES6(又名 ES2105)是 JavaScript 语言的新标准,2015 年 6 月正式发布后,得到了迅速推广,是目前业界超级活跃的计算机语言。《ES6标准入门(第2版)》是国内仅有的一本 ES6 教程,在前版基础上增补了大量内容——对标准进行了彻底的解读,所有新增的语法知识(包括即将发布的 ES7)都给予了详细介绍,并且紧扣业界开发实践,给出了大量简洁易懂、可以即学即用的示例代码。 《......一起来看看 《ES6 标准入门(第2版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具