目录
- 前言
- 一、HEAD 的含义与作用
- 二、游离状态的触发场景及特征
- 1. 触发条件
- 2. 游离状态的特征
- 三、游离状态的常见使用情况
- 1. 临时查看历史代码
- 2. 保留游离状态的提交
- 四、注意事项与最佳实践
- 1. 风险防范
- 2. 状态检测技巧
- 总结
前言
本文介绍Git核心概念HEAD的定义,作用和常见使用例子。
一、HEAD 的含义与作用
1.基础定义
HEAD 是 Git 的「游标指针」,始终指向当前所处的提交位置,有以下两种存在形式:
分支指针模式(常见状态):HEAD → 分支名 → 具体提交
例如用git log查看提交历史,下图中HEAD →master →commit 5c039
游离模式(detached HEAD):HEAD → 具体提交
2. 测试命令
cat .git/HEAD # 输出 ref: refs/heads/main
git checkout 84cb0 # 进入游离状态
cat .git/HEAD # 输出 e7d3e9d1d0a...
二、游离状态的触发场景及特征
1. 触发条件
- 检出历史提交
# git 2.23+ 版本中以下两条命令等价
git checkout 84cb0 #游离状态
git switch --detach 84cb0 #游离状态```
- 检出远程分支
git checkout origin/dev #以标签形式检出某次提交,然后HEAD处于游离状态
- 检出标签
git checkout v1.0.0 #以标签形式检出某次提交,然后HEAD处于游离状态`
2. 游离状态的特征
- 允许进行提交操作,但新提交不会关联到任何分支
- 切换回分支时会弹出警告提示:Warning: you are leaving 1 commit behind…
- 未关联分支的新提交会被Git视为「悬挂提交」,2周后可能被垃圾回收清除
三、游离状态的常见使用情况
1. 临时查看历史代码
git checkout v1.2.3 # 游离状态下查看标签版本
git checkout master # 返回主分支,自动退出游离状态
2. 保留游离状态的提交
git checkout e7d3e9d # 进入目标提交
# 进行若干修改并提交
git branch temp-branch # 创建新分支保存提交。这个新的分支
git checkout master # 安全切换回主分支
四、注意事项与最佳实践
1. 风险防范
- 游离状态下提交后必须及时创建分支引用,否则会被当做悬挂提交,git会在一定事件后自动删除此悬挂提交
- 使用 git reflog 可找回未关联分支的提交
2. 状态检测技巧
git symbolic-ref HEAD # 检测是否处于游离状态 1. 游离状态的HEAD 返回 fatal: ref HEAD is not a symbolic ref 2. 正常状态返回分支路径
游离状态返回如下:
正常状态返回如下:
总结
git入门系列之HEAD核心概念,作用和常见使用例子介绍,以及HEAD的正常状态,游离状态对比。抛砖引玉,日积月累