HEAD 指针理解
HEAD 是 Git 中最重要的指针,指向当前所在分支的最新提交。
什么是 HEAD
HEAD 是一个特殊指针,始终指向当前工作位置:
- 正常状态:指向某个分支名
- 分离状态:直接指向某个提交
HEAD 的作用
Bash
正常状态:
HEAD → main → commit C
↓
工作区基于 C
分离状态:
HEAD → commit C (直接指向提交)
↓
工作区基于 C,但不属于任何分支
HEAD 文件位置
Bash
# HEAD 文件位置
.git/HEAD
# 内容示例(指向分支)
$ cat .git/HEAD
ref: refs/heads/main
# 内容示例(分离状态)
$ cat .git/HEAD
a1b2c3d4e5f6g7h8i9j0
HEAD 相关引用
| 引用 | 说明 |
|---|---|
| HEAD | 当前提交 |
| HEAD^ | 当前提交的父提交 |
| HEAD^^ | 当前提交的上上提交 |
| HEAD~n | 当前提交往前 n 个提交 |
| HEAD@{n} | HEAD 的第 n 次历史位置 |
使用示例
Bash
# 查看 HEAD 指向
git symbolic-ref HEAD
# 查看当前提交
git log -1 HEAD
# 回退到上一次提交
git reset HEAD^
# 查看与上一次的差异
git diff HEAD^
# 查看 reflog(HEAD 移动历史)
git reflog
分离 HEAD 状态
text
# 进入分离状态
git checkout <commit-hash>
git checkout <tag>
# 分离状态下的提示
# You are in 'detached HEAD' state
# 保存分离状态下的修改
git checkout -b <new-branch>
HEAD 操作场景
| 场景 | 命令 |
|---|---|
| 查看当前位置 | git log -1 |
| 回退版本 | git reset HEAD~n |
| 撤销暂存 | git reset HEAD |
| 恢复文件 | git checkout HEAD -- |
分离 HEAD 状态下的修改不会被分支保存,需创建新分支保存。
要点总结
- HEAD 指向当前分支或提交
- 正常状态指向分支,分离状态直接指向提交
- HEAD~n 表示往前第 n 个提交
- 分离状态修改需创建分支保存
- git reflog 查看 HEAD 移动历史
📝 发现内容有误?点击此处直接编辑