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