detached HEAD state

1 detached HEAD state指的是什么

正常情况下,HEAD指向一个branch,而branch又指向一个commit。

detached HEAD state指的是HEAD指针没有指向任何的branch,比如说它指向了一个commit。比如我在某次commit处设置了一个tagXXX,然后我git checkout tagXXX,这个时候,我的HEAD就会指向这个commit。

2 detached HEAD state时我能做什么

我也可以提交,这个时候,commit链就在git checkout这个commit的基础上展开,但是如果直接离开到一个branch上的话,这些commits就会被当成garbage,被git garbage collection routine所回收。但是,我们也可以保留这些commits,又下面三种方式:

$ git checkout -b foo ,创建一个branch指向这个commit链,然后HEAD指向这个branch,于是HEAD就不是处于detached state。
$ git branch foo,创建一个branch指向这个commit链,但是HEAD还是处于detached state。
$ git tag foo,创建一个tag指向这个commit链,HEAD还是处于detached state。

3 为什么git checkout origin/XXX远程分支的时候会让HEAD进入detached state?

因为HEAD不能指向远程分支,它只能指向本地的某个commit或者本地分支。当"git checkout 远程分支",HEAD就会直接指向远程分支指向的commit了,HEAD指向commit就会进入detached HEAD state。

这个时候可以

git checkout -b web-zach --trackHEAD就恢复正常,并且local brach web-zach就会跟踪远程分支origin/web-zach。


4 detached HEAD state的危害

一旦出现detached HEAD state,切换分支之后,提交很可能就丢失了,被git回收了。因此要尽量避免出现这个状态。

遇到bug,要到一个老的commit版本去看一下,可以在这个commit的基础上新建一个branch,问题解决了之后删除即可。

git checkout -b new-branch-name commit

5 git checkout的本质

"git checkout branch-name"在于告诉git自己想要在哪个版本上工作,执行了这条命了之后,git会把这个版本的文件都放在working copy文件夹中。

时间: 2024-10-13 20:41:09

detached HEAD state的相关文章

git 和github简介

关于github不清楚的可以百度, 在这里,可以创建一个新的仓库 点击Create repository后会出现下面这些信息,其中第一块是仓库的url链接 第二块是你在本地目录中创建一个READEME.md文件,然后进行初始化,在add和commit提交到分支,然后再关联仓库,最后通过push 推送本地代码到github. 第三块其实就是已创建了本地仓库的前提下,执行第二块后面两行命令,推送代码到github $ git remote add origin [email protected]:L

git: fatal: Not a git repository (or any of the parent directories): .git

在看书 FlaskWeb开发:基于Python的Web应用开发实战 时,下载完源码后 git clone https://github.com/miguelgrinberg/flasky.git 试着 切换到 提交历史 1a, $ git checkout 1a,出现error: fatal: Not a git repository (or any of the parent directories): .git 这个提示表明现在不在一个git repository目录下,需要切换到flask

EF并发详解

EntityFramework Core高并发深挖详解,一纸长文,你准备好看完了吗? 前言 之前有关EF并发探讨过几次,但是呢,博主感觉还是有问题,为什么会觉得有问题,其实就是理解不够透彻罢了,于是在项目中都是用的存储过程或者SQL语句来实现,利用放假时间好好补补EF Core并发的问题,本文比较长,请耐心点看. EntityFramework Core并发初级版初探 关于并发无非就两种:乐观并发和悲观并发,悲观并发简言之则是当客户端对数据库中同一值进行修改时会造成阻塞,而乐观并发则任何客户端都

01-Entity FrameWork如何控制数据的变化

在Entity Framework所有操作数据就是更新EF容器中的实体状态 public enum EntityState { Added = 4, Deleted = 8, Detached = 1, Modified = 0x10, Unchanged = 2 }  1.新增 StudentAddress address = new StudentAddress { Address = "地址" + DateTime.Now }; db.StudentAddress.Add(add

Linux git 多人协助开发实战

git 服务器搭建 创建公钥,准备免密登录 初始化一个版本库 git clone  git客户端 查看git状态 创建一个文件 添加到暂缓区 提交到版本库 查看git日志 checkout 从缓存区恢复文件到工作区 reset 版本区恢复到缓存区 查看git日志 reset --hard 工作区,缓存区被版本库重置 查看工作区与缓存区的差异 查看缓存区与版本库的差异 查看工作区与版本库的差异 演示git状态,精简状态 删除版本库的文件 从版本库恢复文件 查看文件提交的历史信息,便于bug追踪 b

xiazai linux bt demo

[email protected]:~$ [email protected]:~$ [email protected]:~$ [email protected]:~$ lsDesktop    Downloads  esp-project  Pictures  Sandstorm  VideosDocuments  esp        Music        Public    Templates[email protected]:~$ lsDesktop    Downloads  esp

部署自己的gitlab服务器

本文系统:centos 6.5 x64 ip: 172.16.162.130 GitLab         8.0.5 GitLab         Shell2.6.6 GitLab         APIv3 Ruby           2.2.3p173 Rails          4.1.12 1.安装依赖包 [[email protected] ~]# yum install gcc* libicu* -y 2.安装git程序,因为系统自带版本太低 [[email protecte

git下的团队合作模型及git基础知识汇集

https://www.atlassian.com/git/tutorials/syncing/git-fetch Syncing svn使用单个中央库来作为开发者之间沟通的桥梁,而协同合作是通过在开发者和中央库之间传递changeset来实现的.这种情况对于GIT的协同模型是有区别的,在git下每一个开发者都拥有他们自己的整库copy.取而代之于从working copy来提交变更集到一个中央库中,git允许你在不同的repo之间分享整个分支. 下面的命令允许你管理你和其他repo之间的连接,

Tachyon 0.7.1伪分布式集群安装与测试

Tachyon是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和 MapReduce那样.通过利用信息继承,内存侵入,Tachyon获得了高性能.Tachyon工作集文件缓存在内存中,并且让不同的 Jobs/Queries以及框架都能内存的速度来访问缓存文件.因此,Tachyon可以减少那些需要经常使用的数据集通过访问磁盘来获得的次数. 源码下载 源码地址:https://github.com/amplab/tachyon git clone http