首页 > 其他分享 >git学习笔记2

git学习笔记2

时间:2023-05-21 23:25:19浏览次数:43  
标签:HEAD git 记录 笔记 学习 Git 提交 分支

在提交树上移动

在接触 Git 更高级功能之前,有必要先学习在你项目的提交树上前后移动的几种方法。
一旦熟悉了如何在 Git 提交树上移动,你驾驭其它命令的能力也将水涨船高!

我们首先看一下 “HEAD”。 HEAD 是一个对当前所在分支的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。

  • git checkout c4

相对引用

通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有漂亮的可视化提交树供你参考,所以你就不得不用 git log 来查查看提交记录的哈希值。
并且哈希值在真实的 Git 世界中也会更长(译者注:基于 SHA-1,共 40 位)。
例如前一关的介绍中的提交记录的哈希值可能是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8。舌头都快打结了吧...
比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。因此我可以仅输入fed2 而不是上面的一长串字符。
正如我前面所说,通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。这个就很厉害了!
使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。
相对引用非常给力,这里我介绍两个简单的用法:

  1. 使用 ^ 向上移动 1 个提交记录
  • git checkout main^ 访问main分支现在最新节点的父节点
  1. 使用 ~ 向上移动多个提交记录,如 ~3

移动分支位置

  • git branch -f main main~6将分支main强制转到其向上第6个节点

撤销变更

在 Git 里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。
主要有两种方法用来撤销变更 —— 一是 git reset,还有就是 git revert。接下来咱们逐个进行讲解。

git reset

通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。

git revert

虽然在你的本地分支中使用 git reset 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!
为了撤销更改并分享给别人,我们需要使用 git revert

在我们要撤销的提交记录后面会多了一个新提交!这是因为新提交记录 C2' 引入了更改 —— 这些更改刚好是用来撤销 C2 这个提交的。也就是说 C2' 的状态与 C1 是相同的。

标签:HEAD,git,记录,笔记,学习,Git,提交,分支
From: https://www.cnblogs.com/lingfeng647/p/17419447.html

相关文章

  • 学习笔记-Java8新特性-第四节-StreamAPI
    StreamAPI利用StreamAPI可以像流水线一样操作处理数据源(数组、集合……)Stream自己不会存储元素Stream不会改变数据源,而是会返回一个持有处理结构的新StreamSteam操作时延迟执行的,他们会等到需要结果的时候才执行称为惰性求值Stream操作的三个步骤创建Stream......
  • java学习日记20230521-HashTable
    存放的键值对k-v键和值都不能为空,否则会抛出NullPointException使用方法和HashMap一致线程安全,HashMap线程不安全继承的dictionary实现了Map接口底层是一个entry数组,初始化大小为11,临界值为8,第一次扩容为23,按照自己的扩容机制,2N+1 ......
  • Netflix 网站架构学习
    Netflix网站架构学习Netflix架构的特点是他们没有自建数据中心,而是将服务直接架设在AWS的云服务上(EC2和S3),并通过自建CDNOpenConnect提供高质量的点播服务。Netflix采用微服务架构,将复杂业务流程拆解成独立的小型服务,服务间通过REST或RPC彼此调用。CDNCDN的主......
  • 学习笔记-Java8新特性-第五节-Optional类
    Optional类Optional<T>是一个容器类代表一个值存在或不存在致力于解决空指针异常问题(NPE)可以快速锁定发生NPE的位置(这东西真的好用吗?)常用方法Optional.of(Tt)创建一个Optional实例不能传入空指针,会报NPE使用Optional,报空指针了,说明就是这里的问题?......
  • 学习笔记-Java8新特性-第六节-接口中的默认方法与静态方法
    接口中的默认方法与静态方法默认方法在接口中可以使用default修饰方法,为方法提供默认实现publicinterfaceMyInterface{defaultvoidgetName(){System.out.println("DEFAULT");}}一般情况下,继承了接口的子类,可以不提供接口的实现类优先......
  • 学习笔记-Java8新特性-第七节-新时间与日期API
    新时间与日期API本地时间类LocalDateLocalTImeLocalDateTime简介人读的时间提供以ISO-8601为标准的日期和时间提供简单的日期或时间并不包含当前的时间信息也不包含与时区相关的信息示例publicvoidtest1(){LocalDateTimelocalD......
  • 学习笔记-Java8新特性-第三节-方法引用与构造器引用
    方法引用与构造器引用什么是方法引用对方法的引用若Lambda体中的内容,已经有方法实现了,我们可以使用该方法的方法引用作为替代已经有方法实现了是指,该方法的参数列表和返回值类型和lambda的一致可以将方法引用理解成Lambda表达式的另外一种表现形式语法格式对象......
  • 学习笔记-Java8新特性-第二节-Lambda表达式
    Lambda表达式Lambda表达式是什么Lambda是一个匿名函数是一段可以传递的代码是一种语法糖使用Lambda可以写出更简洁、更灵活的代码如果要使用Lambda表达式,需要函数式接口的支持Lambda的语法格式基础语法Java8中引入了一个新的操作符->称为箭头操作符或La......
  • jQuery Mobile笔记二
    6、按钮6.1 链接按钮(1)默认按钮,填充其外层容器的整个宽度 <ahref="#"data-role="button">Button</a>(2)紧凑按钮,宽度与内部的文本和图标的宽度相同<ahref="#"data-role="button"data-inline="true">Button</a>6.2 表单按钮<buttontype......
  • 数据结构—树(自学笔记)(郝斌)
    文章目录树的定义专业定义通俗的定义相关术语树的分类一般树二叉树二叉树的分类二叉树的性质对于第一条来说是显然的,i=1时就是根节点。i>1时,比如节点7,它的双亲就是•⌊......