zoukankan      html  css  js  c++  java
  • 16. branch与HEAD的理解,使用git reset恢复到过去的某个版本

    1. branch指针与HEAD指针

    1.1 branch是什么?
    branch本质上是指向commit对象的指针。
    1.2 HEAD是什么?
    HEAD是指向branch的指针,指向的是当前所在的分支。
    为什么需要HEAD指针?因为往往分支都会有很多个,比如说master,dev等等,那么怎么知道当前所在的分支是哪个呢?就是通过HEAD指针来知道的,它指向的分支就是当前所在的分支。
    在切换分支的时候,只是简单的HEAD指针的移动。所以git切换分支很快。

    2. git reset恢复版本

    如下图所示,是当前git仓库(Git Repository)、暂存区(Index)以及工作区(Working Directory)的状态。
    HEAD和master都指向了最后一次的提交file.tex v3。暂存区和工作区中的file.txt也是v3版本。

    2.1 简单的三条reset命令

    可以使用三条命令来恢复到上一个commit:git reset --soft HEAD~ 、 git reset --mixed HEAD~ 、git reset --soft HEAD~
    HEAD~表示的是当前commit节点的父节点。

    1. git reset --soft HEAD~ // 撤销git仓库的上一次的commit,但是不改变暂存区以及工作区
    

    执行上面的命令,指针移动如下:git仓库中的HEAD指针以及分支master指针都会移动到上一次的提交。但是暂存区和工作区不会发生变化。
    在这里插入图片描述

    2. git reset --mixed HEAD~ // 撤销git仓库和暂存区的上一次的commit,但是不改变工作区
    

    执行上面的命令,指针移动如下:git仓库中的HEAD指针以及分支master指针都会移动到上一次的提交。同事暂存区也会恢复到上一次的提交。但是工作区不会发生变化。
    在这里插入图片描述

    3. git reset --hard HEAD~ // 撤销git仓库、暂存区以及工作区上一次的commit
    

    执行上面的命令,指针移动如下:git仓库中的HEAD指针以及分支master指针都会移动到上一次的提交。同事暂存区也会撤销到上一次的提交。最后工作区也会撤销到上一次的提交。
    在这里插入图片描述
    注意:

    1. git reset HEAD~ 与 git reset mixed HEAD~等价。也就是说直接执行git reset HEAD ~会恢复git仓库和暂存区。
    2. --hard比较危险,因为它连工作区的文件也回滚了。如果被回滚的文件,被commit过,那么git数据库中还保留一个该文件的V3版本,可以通过reflog来找回。但是如果没有被提交过,就永远找不回来了。

    2.2 git reset指定的文件

    1. git reset file.txt // 撤销file.txt的暂存,和git add操作相反
    

    详细解释的话,其实就是将HEAD指向的commit(HEAD指向的是当前所在的分支),复制到暂存区中。
    在这里插入图片描述

    2. git reset eb43bf file.txt // 指定特定的commit,复制到暂存区中(eb43bf就是commit的hash值)
    

    如下图所示的例子:将file.txt v1 复制到暂存区,但是工作区以及git仓库保持不变
    在这里插入图片描述

    3. git reset命令的总结

    如下图所示,REF表示的是会改变git仓库中的branch和HEAD的指向。
    Index一栏的YES表示的是会改变暂存区。
    Workdir一栏的YES表示的是会改变工作区。
    在这里插入图片描述

  • 相关阅读:
    iOS MVC、MVVM、MVP详解
    消息队列(mq)是什么?
    使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文
    Linux下实现高可用软件-Keepalived基础知识梳理
    手动编译部署LNMP环境(CentOS7.5+Nginx-1.18.0+MySQL-5.7.30+PHP-7.4.14)
    linux 查看硬盘使用情况
    解决vue3.0新建项目无法选中Manually select features
    运行vue项目时报错:You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.
    git pull 报错remote: HTTP Basic: Access denied fatal: Authentication failed for 的解决方法
    Excel文档导出——后端返回文件流,前端实现下载功能
  • 原文地址:https://www.cnblogs.com/wangwenhui/p/12674832.html
Copyright © 2011-2022 走看看