IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git & GitHub 杂记:HEAD到底是个什么东西 -> 正文阅读

[开发工具]Git & GitHub 杂记:HEAD到底是个什么东西

一般情况下,在查看提交的历史与差异中就能看到HEAD,也可能看到别人用 git reset HEAD <filename> 来撤销刚刚某文件的暂存,但 HEAD 到底是什么呢?

head 是对提交的引用。在谈论提交时,我们不谈提交名,而是说 head 。
当在不同的提交之间切换时,我们需要一种方法——当前磁头(被检出的磁头)即HEAD——来告知知道我们在哪个head上:

dang@DFLubuntu:~/testproject$ git log --oneline
b5c33cc (HEAD -> master) 向b.txt添加测试内容
2ae6624 向a.txt添加测试内容
639471b 新增两个用于测试的文本文件以及一个说明文件
5a4052c 再次修改问候语
c56e23d 修改问候语
60ba7bc 第一次提交
dang@DFLubuntu:~/testproject$ git show HEAD
commit b5c33cc4e0db85fe9380a3b58814c337e644070e (HEAD, master)
Author: xiaolu2333 <2694977226@qq.com>
Date:   Mon Nov 15 22:39:24 2021 +0800

    向b.txt添加测试内容

diff --git a/b.txt b/b.txt
index e69de29..ba62923 100644
--- a/b.txt
+++ b/b.txt
@@ -0,0 +1 @@
+BBB
  • 当前提交就是最新提交。

这里就需要区别两个概念,当前提交最新提交

  • 没有其他分支且没有切换提交时,情况是这样:这里只有一个master主分支,HEAD 指向 master 告诉我们正工作在名为 master 的 head 上,而 master 始终引用最新的提交,所以说 head 就是对最新提交的引用并且当前提交就是最新提交:
    在这里插入图片描述
  • 切换提交的操作就会改变 HEAD 的指向,我们可以通过检出等操作将当前状态定位到之前的某个提交,这就使得当前提交不是最新提交。此时的HEAD状态被称为HEAD的分离态:
    在这里插入图片描述
  • 当我们在当前提交后又创建一次提交,新提交会已分支的形式扩展出去,此时当前提交就又是最新提交了:
    在这里插入图片描述
  • 如果又切换回master时,当前提交就变为b5c33cc,它始终被master引用,而最新提交5a4202d由于没有被谁引用,它最终会被当成垃圾回收处理,除非我们在它被回收前创建一个分支名或者标签名来引用它:
    在这里插入图片描述

当切换提交时:

dang@DFLubuntu:~/testproject$ git checkout 5a4052c
注意:正在切换到 '5a4052c'。

您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。

如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
中添加参数 -c 来实现(现在或稍后)。例如:

  git switch -c <新分支名>

或者撤销此操作:

  git switch -

通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议

HEAD 目前位于 5a4052c 再次修改问候语

# 已回到具体的历史中的提交的状态
dang@DFLubuntu:~/testproject$ git show HEAD
commit 5a4052cf13aef78e15d3ae0fb71057e0996b3bad (HEAD)
Author: xiaolu2333 <2694977226@qq.com>
Date:   Mon Nov 15 14:45:05 2021 +0800

    再次修改问候语

diff --git a/README.md b/README.md
index 7bcfe7c..acd3ef0 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-TESTPROJECT
+WELCOME TO TESTPROJECT
diff --git a/test.py b/test.py
index 3b0b1ed..509056f 100644
--- a/test.py
+++ b/test.py
@@ -1,4 +1,4 @@
 from datetime import datetime
 
-print("What's the time?")
+print("Now: ")
 print(datetime.today())
dang@DFLubuntu:~/testproject$ git log --oneline
5a4052c (HEAD) 再次修改问候语
c56e23d 修改问候语
60ba7bc 第一次提交
  • checkout 5a4052c 后 HEAD 指向了 5a4052c 提交。

再来看一个相关的概念:父提交
在我们的所有提交中,当前的提交是 b5c33cc ,那么它的父提交就是 2ae6624,所以说 HEAD 是对当前提交的引用时,那么 HEAD^ 或者 master^ 就引用当前提交的父提交:
在这里插入图片描述
之所以执行git reset HEAD <filename> 能撤销刚刚某文件的暂存,实际上是因为filename文件只是被添加到了暂存区而尚未被提交,这就尚未改变 HEAD 引用的当前提交,reset 只不过是重置了当前提交中filename文件的相关操作,也就是取消将它暂存到暂存区这一操作,从而达到撤销该文件的暂存的目的。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:57:47  更:2021-11-17 12:57:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:50:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码