之前对于git checkout
的认识停留在可以执行以下操作:
git checkout 分支名 # 用于切换分支
git checkout -b 分支名 # 用于创建分支并切换
今天突然看到了一个git checkout 历史标号
,这个用法被称为HEAD分离。一开始以为自己之前的笔记里有漏洞,开始怀疑起了自己。仔细查看了这个命令的用法后,才觉得自己对git的理解又加深了。
以下为自己的理解:
git实际上维护的是一串历史记录,每个历史标号都是一条记录的id,而不同的分支表示不同的指针,指向某一个历史标号,沿着那个标号往前,可以查看所有的历史记录。而HEAD也是一个指针,只是我们经常情况下将其和分支指针指向同一个历史记录,而使用git checkout
命令就是用来移动HEAD指针的。
再回到前面的问题,把HEAD指针移动到非分支指针指向的历史节点,就可以实现HEAD的分离。什么时候进行这样的操作比较好呢,链接:https://blog.csdn.net/yunfeng482/article/details/88260894 将其总结为以下几种情况:
-
如果临时想基于某个commit做变更,试试新方案是否可行,就可以采用分离头指针的方式。测试后发现新方案不成熟,直接reset回其他分支即可,省去了建、删分支的麻烦,git会忽略管理这个没有分支commit。
-
进行到某个commit,试试新方案,为该commit建立新的branch,可以进行特性开发。
-
分离头指针对应的commit,你如果认为有用需要保留,那就用新分支把它保留。
-
如果当下无master分支,可以在分离头指针状态下,git checkout -b master HEAD