学习操作HEAD指针,具体如下:

- 查看Git版本信息

- 移动指针

- 通过移动HEAD指针恢复数据

- 合并版本

拓扑图:

方案: HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。

每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动

1. 对数据仓库进行一些修改、提交操作,以产生多个版本,为后面的验证做准备

[root@web2 ~]# git clone root@192.168.2.100:/var/git/project

[root@web2 ~]# cd project

[root@web2 project]# git pull

[root@web2 project]# git status

[root@web2 project]# echo "new file" > new.txt   #写入数据

[root@web2 project]# git add .

[root@web2 project]# git commit -m "add new.txt"

[root@web2 project]# echo "first" >> new.txt     #写入数据

[root@web2 project]# git add .

[root@web2 project]# git commit -m "new.txt:first line"

[root@web2 project]# echo "second" >> new.txt     #写入数据

[root@web2 project]# git add .

[root@web2 project]# git commit -m "new.txt:second"

[root@web2 project]# echo "123" > num.txt    #写入数据

[root@web2 project]# git add .

[root@web2 project]# git commit -m "num.txt:123"

......

2. 查看Git版本信息

[root@web2 project]# git reflog

[root@web2 project]# git log --oneline     #查看Git版本信息

04ddc0f num.txt:789

7bba57b num.txt:456

301c090 num.txt:123

b427164 new.txt:third

0584949 new.txt:second

ece2dfd new.txt:first line

e1112ac add new.txt

3. 移动HEAD指针,将数据还原到任意版本. 提示,当前HEAD指针为HEAD@{0}

[root@web2 project]# git reset --hard 301c0     #恢复到版本301c0

[root@web2 project]# git reflog

301c090 HEAD@{0}: reset: moving to 301c0

04ddc0f HEAD@{1}: commit: num.txt:789

7bba57b HEAD@{2}: commit: num.txt:456

301c090 HEAD@{3}: commit: num.txt:123

b427164 HEAD@{5}: commit: new.txt:third

0584949 HEAD@{6}: commit: new.txt:second

ece2dfd HEAD@{7}: commit: new.txt:first line

e1112ac HEAD@{8}: commit: add new.txt

1a0d908 HEAD@{9}: commit (initial): 初始化

[root@web2 project]# cat num.txt       #查看文件是否为123

123

[root@web2 project]# git reset --hard 7bba57b

[root@web2 project]# cat num.txt        #查看文件是否为123,456

123

456

[root@web2 project]# git reflog       #查看指针移动历史

7bba57b HEAD@{0}: reset: moving to 7bba57b

301c090 HEAD@{1}: reset: moving to 301c0

...

[root@web2 project]# git reset --hard 04ddc0f    #恢复num.txt的所有数据

4. 模拟误删后的数据还原操作

[root@web2 project]# git rm init.txt

rm 'init.txt'      #删除文件

[root@web2 project]# git commit -m "delete init.txt"    #提交本地仓库

[root@web2 project]# git reflog      #查看版本历史

0dc2b76 HEAD@{0}: commit: delete init.txt    #有删除init.txt的记录

7bba57b HEAD@{0}: reset: moving to 7bba57b

301c090 HEAD@{1}: reset: moving to 301c0

...

[root@web2 project]# git reset --hard 04ddc0f            #恢复数据

[root@web2 project]# ls

demo init.txt new.txt num.txt

结束.

git的HEAD指针操作的更多相关文章

  1. git学习 本地常用操作01

    注意: Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动 不要使用Windows自带的记事本编辑任何文本文件 开始git项目: 初始化本地项目: 初始化:g ...

  2. Git与GitHub常用操作

    --------------------------基本操作--------------------------clone 拷贝远程仓库commit 本地提交push 远程提交pull 更新本地--- ...

  3. 【Git】命令行操作

    Git 命令行操作 1 本地库初始化 git init:初始化本地仓库 效果 注意:.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改. 2 设置签名 形式: 用户名:tom E ...

  4. Git 常见的命令操作

    克隆                git clone git地址 查看分支         git branch 查看git库状态  git status 切换分支         git  che ...

  5. C#指针操作Marshal实例

    static void Main(string[] args) { ,,,}; ,,,}; IntPtr pt = Marshal.AllocHGlobal(a.Length); //从source数 ...

  6. C语言指针操作

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...

  7. Day4:T1小技巧(类似于指针操作)T2搜索+小细节

    Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...

  8. Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突

    Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...

  9. C语言数组操作和指针操作谁更高效

    在上一篇博文  代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...

随机推荐

  1. Seata简单介绍及其原理(一)

    Seata 是什么? Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的 ...

  2. 【bzoj3564】 [SHOI2014]信号增幅仪

    题目描述: 无线网络基站在理想状况下有效信号覆盖范围是个圆形.而无线基站的功耗与圆的半径的平方成正比. 现给出平面上若干网络用户的位置,请你选择一个合适的位置建设无线基站.... 就在你拿起键盘准备开 ...

  3. 基于Cesium的Web3d实现二三维室内外一体化融合

    https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/index.html?src=3D%20Models.html 三维建模 BIM

  4. 几种Android混淆和逆向工具介绍

    针对Android面临的安全风险,一些防止逆向的方法应运而生.代码混淆在X86架构上曾经被广泛研究,他被用于保护软件的只是产权,但是恶意软件也常常使用他来对抗杀毒软件或者对抗逆向分析者,代码混淆可以给 ...

  5. uniapp 之navigateTo:fail page 跳转路径不对

    开发uniapp,点击列表跳转详情报错 [system] navigateTo:fail page `/pages/tabBar/index/detail/detail?title=uni-app行业 ...

  6. vue 实现,子组件向父组件 传递数据

    首先理清组件之间的关系 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A 在它的模板中使用了组件 B,那么组件 A 就是父组件,组件 ...

  7. C#中使用Join与GroupJoin将两个集合进行关联与分组

    转自:https://www.cnblogs.com/cncc/p/7985843.html 对于Join的用法说明如下: 语法: public static IEnumerable<TResu ...

  8. 【后台管理系统】—— Ant Design Pro组件使用(二)

    一.关联表单项 - 动态增删输入框Input        封装子组件 class ParamsInputArray extends React.Component{ constructor(prop ...

  9. Delphi XE2 之 FireMonkey 入门(24) - 数据绑定: TBindingsList: TBindExpression.Direction

    在学习 BindingSource 属性时, 可以让两个控件互为绑定源; TBindExpression 对应的功能是 Direction 属性. 先在窗体上添加 Edit1.Edit2.Bindin ...

  10. 负载均衡环境搭建(nginx和tomcat)

    偶然看到博客上一篇负载均衡的文章,学习了一下,此处做下记录 目录 1.环境准备 2.tomcat配置 3.nginx配置 1.环境准备 第一步:java环境 第二步:nginx和pcre源码包 下载链 ...