在先前的章节里,我们可以常看见 HEAD 这个名词,它指的是什麽呢?
// git 恢复文件到初始状态
$ git reset HEAD <file>
// git 展示提交命令
$ git log
commit c4f9d71863ab78cfca754c78e9f0f2bf66a2bd77 (HEAD -> master)
(SHA-1 记得改成自己的)
这篇就让我们好好了解 HEAD 吧!
HEAD 指的是一个指标,指向当前所在的分支 。
分支其实是个指向 commit 对象的指针,用来记录不同的工作变动,如 master
、 develop
分支,因此我们如何知道当前是在哪个分支上操作的呢?
其实就是使用 HEAD 档案来记录的哦!HEAD 是一个特别指针,在 Git 中,指向你正在工作中的本地分支的指针,因此通常我们也可以把 HEAD 看作 「目前所在分支」,也就是当前分支的别名。
在 .git 目录里可以找到 HEAD 档案。
HEAD 档案里面是什麽呢?我们可以输入指令来查看。
$ cat .git/HEAD # 显示 .git 目录里的 HEAD 档案内容
//cat <file> 是 Linux 档案管理指令
得到的回馈是:ref: refs/heads/master
ref 同 References ,「引用」之意。从回馈的讯息中,可以看出目前 HEAD 正指向某个分支,我们可以继续查看 refs/heads/master 的内容。
$ cat .git/refs/heads/master # 显示 .git/refs/heads/master 的内容
回馈显示:f926dd97ae8a3c25176d8ce1268c37a8d8753eb3
这 40 个字元代表的是什麽呢?是 SHA-1 值,每一次提交一个版本就会有代表的 SHA-1 值。
以上输入指令的步骤,我们也可从画面中查看。
找到 .git 目录下的 HEAD 档案
点开 HEAD 档案显示内容
根据内容找到 refs 目录,并持续打开里面的内容,找到 master 档案
点开 master 档案,查看内容
上面我们有提到 HEAD 档案用来记录我们当前的分支在哪里,那接下来我们就透过实际操作看看 HEAD 的指向吧。
HEAD 可以选择指向到:
分支(Branch)
commit 版本
输入以下指令,完成提交动作
// 在 git_practice 资料夹底下
$ mkdir project # 新建一个 project 目录
$ cd project # 将工作目录切换到 project 目录
$ git init # 在 project 目录中建立数据库
$ touch hello.html # 建立一个 hello.html 档案
$ git add . # 将档案加至暂存区
$ git status # 检查状态(也可略过)
$ git commit -m"讯息记录" # 提交至储存库,新增一次 commit 版本
输入 git branch
指令,浏览目前分支指向
按 q 键可退出
回馈显示: * master
*
代表目前在这个分支上面。master
为目前新增的分支( master 就是我们的预设分支名称)。因此我们可以知道目前在 master 这个分支上。
查看版本 git log
指令
因为目前我们只提交一次 commit ,因此只有一次的版本纪录。
此时 HEAD - master - commit 的关系图为:
假设我们今天又多做了几次修改,并 commit 提交版本纪录
使用 git log
指令查看历史纪录
回馈显示我们总共提交了四个 commit ,而 HEAD 指向最後一次的版本,这代表 HEAD 会随着我们每一次新增 Commit 时,都指向最新的版本分支。(HEAD -> master)
注意:历史纪录是最近期的放在最上面,时间由远到近排列为由下而上。
此时 HEAD - master - commit 的关系图为:
状况题|想查看最初的版本
方法:可以透过 HEAD 来指向指定的 commit 版本。
🛠 实际操作
使用 git log 指令查看历史纪录时,我们可以查到最初的版本(版本一)的 SHA-1 编号。
版本一的 SHA-1 编号前四码为: 0076
使用 git checkout
指令,切换到指定 commit 版本
$ git checkout SHA-1编号前四码(识别码) #切换到指定版本
版本切换到最初的版本罗!
我们可以从工作目录看一下变化:
补充:即使回到旧的 commit 版本,其他的版本不会因此而不见喔!
状况题|如果想将版本切回现在(最新)的版本呢?
方法:使用 git checkout master
指令
输入指令後,重新指向了 master 分支,工作目录中的画面也是当初最後步骤的样子。
上述状况题,我们使用 SHA-1 编码切换到指定版本,其实也可以透过以 HEAD 为起点,跟它相距的版本唷!
各版本之间以 HEAD 为基准点,其他版本的相对位置:
^
符号表示「前一次」,^^
代表往前两次。~3
盗号加数字可以直接往前推指定数字次数。
使用 HEAD 相对位置来切换版本
$ git checkout HEAD~3 # 切换到三次前的版本
可以看到结果跟上面一样,切换到版本一罗!
因此如果要切回现在(最新版本)的话,一样要输入git checkout master
指令。
树的高度(height of the tree) 在Binary Search tree中,我们知道...
来练习帮 Google Sheets(电子试算表)增加一点内容吧。 今日要点: 》Spreadsh...
我们透过 LeetCode #412 Fizz Buzz 来实际感受解决问题的过程 ( 题目连结 )...
哎呀哎呀,开学後变得好忙阿,连一天写一篇的时间都没有,果然先预留点文章是对的。参赛前还以为30天很短...
React 图片显示 ?引入图片(svg)-背景图片 只需要将图片放到 public目录下 然后以此...