• git学习笔记三


    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): 第一次提交

  • 相关阅读:
    hdoj:2075
    hdoj:2072
    hdoj:2071
    hdoj:2070
    hdoj:2069
    test001
    hdoj:2067
    hdoj:2061
    hdoj:2058
    hdoj:2057
  • 原文地址:https://www.cnblogs.com/zhanghaiyublog/p/3661381.html
Copyright © 2020-2023  润新知