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指针都会移动到上一次的提交。同事暂存区也会撤销到上一次的提交。最后工作区也会撤销到上一次的提交。

注意:

git reset HEAD~ 与 git reset mixed HEAD~等价。也就是说直接执行git reset HEAD ~会恢复git仓库和暂存区。

--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表示的是会改变工作区。

git head指向老版本_16. branch与HEAD的理解,使用git reset恢复到过去的某个版本相关推荐

  1. git head指向老版本_Git最全总结

    Git与SVN的主要区别 Svn是集中式的版本控制系统,而git是分布式的 集中式就存在单点故障风险,一旦SVN的远程仓库挂掉了,那我的本地项目再也不能做提交,也不能做分支的切换,也不能够干和版本管理 ...

  2. git head指向老版本_Git HEAD detached from XXX 解决

    Git 中的 HEAD 可以理解为一个指针,我们可以在命令行中输入 cat .git/HEAD 查看当前 HEAD 指向哪儿,一般它指向当前工作目录所在分支的最新提交. cat .git/HEAD r ...

  3. git head指向老版本_Git HEAD 重置和分离头指针

    一.HEAD的重置即检出 HEAD可以理解为"头指针",是当前工作区的"基础版本",当执行提交时,HEAD指向的提交将作为新提交的父提交. 1.看看当前HEAD ...

  4. git head指向老版本_git checkout之一 HEAD基本和detached 状态

    1.HEAD基础 git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch. HEAD文件指向的branch就是当前branch. 一般来讲,HEAD的内容是指向stagi ...

  5. git 移动分支指针_git 分支( branch ) 的基本使用

    分支( branches ) 是指在开发主线中分离出来,做进一步开发而不影响到原来主线. Git 存储的不是一系列的更改集( changeset ),而是一系列快照.当你执行一次 commit 时, ...

  6. 【错误记录】Git 使用报错 ( error: Cannot delete branch ‘dev‘ checked out at ‘D:/Git/git-learning-course‘)

    文章目录 一.报错信息 二.解决方案 一.报错信息 使用 Git 操作 版本库 , 删除分支时 , 报如下错误 : D:\Git\git-learning-course>git branch - ...

  7. git之Pushing to the remote branch is not fast-forward错误解决

    今天推送代码的时候报错了这个Pushing to the remote branch is not fast-forward,so the push has to be forced.The comm ...

  8. 删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法

    先输入: 在git 命令行终端输入 git fetch -p origin 查看所有分支: git branch -a 然后删除: git push origin -d xxxx 如果报错:git: ...

  9. git pull命令操作 git pull <remote> <branch>

    git pull命令操作 git pull <remote> <branch> git pull <remote> <branch> 解决1: git ...

最新文章

  1. 3D点云补全算法汇总及最新进展
  2. mysql单表最大数据量_你的Mysql库真需要Adaptive Hash Index
  3. TIOBE 8 月榜单:C 力压 Java 夺得第一,Java掉了1.6 个点
  4. 文本自动摘要任务的“不完全”心得总结
  5. 安卓ttf格式的字体包_字体 | 新游黑体(游)精巧的日系字体~
  6. 读书笔记|《金字塔原理》第二章
  7. 黑苹果长期维护机型整理清单
  8. React移动端适配方案
  9. ESX添加过时的硬件
  10. ANSYS APDL 绘制云图时出现错误“The Requested S data is not available. The PLNSOL command is ignored“的解决方法
  11. 适合前端Vue开发童鞋的跨平台Weex
  12. Hadoop环境配置(6)-MySQL安装
  13. 递归算法之蜜蜂路线问题
  14. EventTarget.addEventListener()事件监听
  15. java将中文转为拼音
  16. 浅谈企业文化的重要性,搭档之家有话说
  17. C语言 printf 打印double、float类型
  18. 运用分支定界法(分支限界法)解决01背包问题
  19. 好分数班级等级C_重磅!湖北2019年高考分数线公布!
  20. 微信公众号运营 新手必知的五大运营攻略

热门文章

  1. 微精:推荐+订阅=个性化智能体验
  2. 网上打印纳税申报表等预览有网格打印不显示
  3. CSS3-选择器+文字+边框+背景+颜色+渐变
  4. struts中文乱码解决方法详解
  5. win8下载java_jdk,64位下载win8
  6. Qt之实现动效导航栏
  7. vip会员开通续费html页面
  8. 王爽汇编语言第三版答案
  9. App Inventor 2连接模拟器一直失败的问题解决
  10. eclipse 背景色 豆沙绿