在使用 git 时,会冷不丁弹出一些术语,在之前可能没有听过,突然之间心情就紧张起来了。
其中就有一个分离头指针(detacged HEAD)
分离头指针
有时你在切换分支时,输了一个commit
信息
image
git 给你的提示,你现在正在基于这个commit
做操作。
你现在正处在分离头指针状态,你可以做一些变更然后产生commit
,你也可以把生成的commit
丢弃掉。也就是说你在分离头指针状态下,可以继续开发,但不影响其他开发,它的本意是:现在正在工作在没有分支的状态下。
下面具体演示下分离头指针的操作。
现在修改了 style/style.css 文件,并且commit
了
这时候用git log
查看历史信息时,发现之前HEAD
这变都会指向一个分支,然而这边却没有。这个就叫分离头指针状态
image
假设这是你接到了一个任务,需要切换分支
image
它会有一个警告说:现在有一个commit
没有加到分支上去。也就是说这个commit
一会会被垃圾清理掉。我们可以gitk --all
来查看有没有add main
的commit
信息。
image
从上图可以看出,这个commit
没有和某个分支绑着,也没有和某个tag
绑着,在 git 眼里,这种commit
日后都是要被清除的。
假如这个时候我醒悟过来了,觉得这个commit
很重要,按照它的指示信息建一个分支,将它保留下来。
image
此时你可以看到add main
的commit
被保留了下来。
如果你想要添加到某个分支上,再用merge
比如你想添加到master
分支上,将HEAD
切换到master
分支,然后用git merge css
,就将这次commit
添加到master
上了。
进一步理解 HEAD 和 branch
git ckeckout -b fix_bug temp //新分支
git diff commit信息 commit信息 //比较两个 commit 之间的差异
git diff HEAD HEAD^ //等价于下面这条命令
git diff HEAD HEAD~1 //等价于上面这条命令