共计 807 个字符,预计需要花费 3 分钟才能阅读完成。
在使用 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 // 等价于上面这条命令