Git:DETACHED HEAD的概念

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

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

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的概念》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

C语言的科学和艺术

C语言的科学和艺术

罗伯茨 / 翁惠玉 / 机械工业出版社 / 2005-3 / 55.00元

《C语言的科学和艺术》是计算机科学的经典教材,介绍了计算机科学的基础知识和程序设计的专门知识。《C语言的科学和艺术》以介绍ANSI C为主线,不仅涵盖C语言的基本知识,而且介绍了软件工程技术以及如何应用良好的程序设计风格进行开发等内容。《C语言的科学和艺术》采用了库函数的方法,强调抽象的原则,详细阐述了库和模块化开发。此外,《C语言的科学和艺术》还利用大量实例讲述解决问题的全过程,对开发过程中常见......一起来看看 《C语言的科学和艺术》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具