首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Git中HEAD 游离的原因与解决方法

什么是 HEAD

Git 中的 HEAD 可以理解为指针,指向当前仓库所处的分支。一般在有 Git 管理的目录下打开 Git 终端都能在当前路径的尾巴上,看到所处的分支名。

还可以在命令行中输入 查看当前 HEAD 指向哪里。

一般它指向当前工作目录所在分支的最新提交。

如何造成 HEAD 的游离状态

一般我们会使用命令 来切换分支,HEAD 就会移动到指定的分支上。

但是,如果我们使用的是 来切换到指定的某一次提交,HEAD 就会处于「detached」状态,也就是游离状态

HEAD 游离状态的利弊

好处:HEAD 处于游离状态时,开发者可以很方便地在历史版本之间互相切换,比如要回到某次提交,只需要 对应的 或者 名即可。

弊端:若在该基础上进行了提交,则会新开一个「匿名分支」;也就是说我们的提交是无法可见保存的,一旦切换到别的分支,原游离状态以后的提交就不可追溯了。

实际情景

下面我们来看看实际的例子。

首先查看一下当前的分支情况,当前只有一个 分支:

再来查看下近期的 日志:

然后假设我要回到倒数第二条 commit 时候的状态,顺便查看下本地工作目录状态以及分支状态:

可以看到,我还没有修改和提交的情况下,切换完成就给我新建了一个分支,并且指明 正游离在 的 上。

如果不做任何修改,想回到 分支,直接 即可,而不要 checkout master 主干所对应的 。

顺利回到主干的话,HEAD 的游离状态会取消,原临时游离分支也会消失。

如果是在游离状态做了修改和提交,则:

切换会 master 分支时,在游离状态所做的修改和提交无法追溯:

如何解决

其实很简单,刚才有仔细看终端提示的同学就会知道,在切换到游离状态的时候应该新建一个分支,然后我们所有的操作修改和提交都会保存到该分支,HEAD 也就指向了该分支最新提交的 commit id 处,而不会再处于游离状态。

当在新建分支上修改提交完毕时,就切换回 master 分支,将原分支合并到 master 分支就万事大吉了。 到这里就不再操作演示了,大家都懂。

参考链接

https://marklodato.github.io/visual-git-guide/index-zh-cn.html#detached

https://git-scm.com/docs/git-checkout#detachedhead

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180620G1MM0700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券