1.每个分支的历史版本维护信息位置是.git/logs/refs/heads/master,这个位置的信息是文本文件,不是引用。

harvey@harvey-Virtual-Machine:~/demo4$ cat .git/logs/refs/heads/master  #查看这个位置的信息,发现最上面的第一行父节点的id 当前节点的id  后面的就是用户名和提交的评论
0000000000000000000000000000000000000000 9aa4a88d227ece5d9079776991ded74e2e577bf8 zhanghaiyu <zhanghaiyu@qq.com> 1397201624 +0800 commit (initial): 第一次提交
9aa4a88d227ece5d9079776991ded74e2e577bf8 ba393f1baf6c217803d93c3a3d4dfdbe5c4039de zhanghaiyu <zhanghaiyu@qq.com> 1397204705 +0800 commit: 第二次提交

2.和.git/logs/refs/heads/master相呼应的是.git/refs/heads/masters这个文件也是文本文件,这个文本文件就是就是master分支的游标,我们使用reset命令的时候如果后面加commit的id就是改变的这个文件的内容。

harvey@harvey-Virtual-Machine:~/demo4$ git reset HEAD --soft #直接执行reset head的soft操作实际上相当于什么也没有操作,因为HEAD就是当前.git/refs/heads/master的引用,而用soft则只是改变head的文件值,不过如果执行git reset HEAD^ -soft就是修改为.git/refs/heads/maste的id在.git/logs/refs/heads/master里面的上一个版本的引用 。git reset --fixed则是不仅改变了这个文件的内容,还会用这个信息改变index文件的信息。 如果用git reset --hard则是不仅改变这个文件的内容还会改变index文件的内容同时还会改变工作区的内容

3.checkout命令的作用则是修改HEAD执行的引用,默认HEAD指向的是master分支也就是.git/refs/heads/master当我们确定了新的分支以后,怎么样让这个引用执行新的文件那,就是用checkout ,checkout可以修改HEAD执行的文件,他指向那个文件,决定着我们当前工作的工作目录。checkout的作用不仅是切换了分支,这个时候,分支文件默认是有上次保存的游标的内容,而且还把游标所执行的内容完全覆盖了index而且覆盖了工作空间。

reset命令只有reset –hard才会修改工作空间而任意一个checkout命令都会修改工作空间的内容。

4.在普通的git设置都有这个配置core.logallrefupdates true,也就是所有的日志更改信息都要保存,所以我们reset后再观察.git/logs/refs/heads/master

harvey@harvey-Virtual-Machine:~/demo4$ git log0 #打开git log信息
ba393f1baf6c217803d93c3a3d4dfdbe5c4039de 第二次提交
9aa4a88d227ece5d9079776991ded74e2e577bf8 第一次提交
harvey@harvey-Virtual-Machine:~/demo4$ git reset HEAD^ #更改.git/refs/heads/master文件的内容
harvey@harvey-Virtual-Machine:~/demo4$ git log0 #再查看log发信只有第一个的提交了
9aa4a88d227ece5d9079776991ded74e2e577bf8 第一次提交
harvey@harvey-Virtual-Machine:~/demo4$ cat .git/logs/refs/heads/master #查看.git/logs/refs/heads/master文件的内容
0000000000000000000000000000000000000000 9aa4a88d227ece5d9079776991ded74e2e577bf8 zhanghaiyu <zhanghaiyu@qq.com> 1397201624 +0800 commit (initial): 第一次提交
9aa4a88d227ece5d9079776991ded74e2e577bf8 ba393f1baf6c217803d93c3a3d4dfdbe5c4039de zhanghaiyu <zhanghaiyu@qq.com> 1397204705 +0800 commit: 第二次提交
ba393f1baf6c217803d93c3a3d4dfdbe5c4039de 9aa4a88d227ece5d9079776991ded74e2e577bf8 zhanghaiyu <zhanghaiyu@qq.com> 1397207296 +0800 reset: moving to HEAD^
#也就是这个日志的文件的信息是通过两个命令来完全查看的
#=======1======================================================================
harvey@harvey-Virtual-Machine:~/demo4$ git log
commit 9aa4a88d227ece5d9079776991ded74e2e577bf8
Author: zhanghaiyu <zhanghaiyu@qq.com>
Date: Fri Apr 11 15:33:44 2014 +0800 第一次提交 Signed-off-by: zhanghaiyu <zhanghaiyu@qq.com>
#=======2======================================================================
harvey@harvey-Virtual-Machine:~/demo4$ git reflog
9aa4a88 HEAD@{0}: reset: moving to HEAD^
ba393f1 HEAD@{1}: commit: 第二次提交
9aa4a88 HEAD@{2}: commit (initial): 第一次提交

git学习笔记三的更多相关文章

  1. Git学习笔记(三)

    Git提交相关内容 在Git提交时,会保存一个提交对象,该对象包括一个指向暂存区内容快照的指针,包括本次提交作者等相关附属信息,包括零个或多个指向该提交对象的父对象指针:首次提交时是没有祖先,普通提交 ...

  2. Git学习笔记三--管理修改、撤销修改、删除文件

    1.管理修改 什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改. 为什么说Git ...

  3. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  4. GIT学习笔记(3):分支管理

    GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...

  5. GIT学习笔记(2):时光机穿梭与远程仓库

    GIT学习笔记(2):时光机穿梭与远程仓库 撤销操作 1.GIT如何跟踪修改 在我们修改了代码内容后,执行了git add和git commit命令来将其交由Git进行版本控制.我们前面举的例子是这样 ...

  6. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  7. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  8. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  9. git 学习笔记6--remote & log

    git 学习笔记6--remote & log 创建SSH Keys ssh-keygen -t rsa -C "1050244110@qq.com" 本地关联远程 git ...

随机推荐

  1. 【刷题】BZOJ 1003 [ZJOI2006]物流运输

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...

  2. c++【1】

    高考完了,重新做码农.要转c++. 按照粉书什么的.果然要告别p党了呢. 第一部分 语言篇 第一章:程序输入 主要是一些输入输出格式. #include<cstdio> 输出: print ...

  3. HDU3949:XOR——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=3949 求n个数的异或和第k小. 参考:https://blog.sengxian.com/algorithms/ ...

  4. AOJ.849 分数 (暴力)

    AOJ.849 分数 (暴力) 题意分析 每次枚举分子,然后根据给出的分数值,推算出来分母,然后取分母上下几个数进行进一步计算,看看哪个更接近. 一开始想着直接枚举分子和分母,复杂度爆炸... 代码总 ...

  5. 图片上传(方法一:jquery.upload.js)

    一.在JSP页面引入jquery.upload.js 文件: <script type="text/javascript" src="${ctx}/script/j ...

  6. 利用caffe的solverstate断点训练

    你可以从系统 /tmp 文件夹获取,名字是什么 caffe.ubuntu.username.log.INFO.....之类 ====================================== ...

  7. UIViewContentMode的各种效果

    UIViewContentMode的各种效果:   首先它是枚举类型的数据,表示为下所示: typedef enum { UIViewContentModeScaleToFill,           ...

  8. jquery动画切换引擎插件 Velocity.js 学习01

    一.Velocity.js介绍 Velocity是一个jQuery插件,重新实现了$.animate() 来产生更高的性能(速度也比CSS动画库更快),而包括新的功能,以提高动画工作流程. Veloc ...

  9. Tomcat免安装版+Eclipse配置

    Tomcat是目前比较流行的开源且免费的Web应用服务器,在我的电脑上第一次安装Tomcat,再经过网上教程和自己的摸索后,将这个过程 重新记录下来,以便以后如果忘记了可以随时查看. 注意:首先要明确 ...

  10. 自定义View的实现流程

    1.继承View组件,比如,LabelView继承了View   2.重写两个构造方法,比如,对于自定义View LabelView   LabelView(Context context),如果该自 ...