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

harvey@harvey-Virtual-Machine:~/demo4$ cat .git/logs/refs/heads/master  #查看这个位置的信息,发现最上面的第一行父节点的id 当前节点的id  后面的就是用户名和提交的评论
0000000000000000000000000000000000000000 9aa4a88d227ece5d9079776991ded74e2e577bf8 zhanghaiyu <[email protected]> 1397201624 +0800 commit (initial): 第一次提交
9aa4a88d227ece5d9079776991ded74e2e577bf8 ba393f1baf6c217803d93c3a3d4dfdbe5c4039de zhanghaiyu <[email protected]> 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 <[email protected]> 1397201624 +0800 commit (initial): 第一次提交
9aa4a88d227ece5d9079776991ded74e2e577bf8 ba393f1baf6c217803d93c3a3d4dfdbe5c4039de zhanghaiyu <[email protected]> 1397204705 +0800 commit: 第二次提交
ba393f1baf6c217803d93c3a3d4dfdbe5c4039de 9aa4a88d227ece5d9079776991ded74e2e577bf8 zhanghaiyu <[email protected]> 1397207296 +0800 reset: moving to HEAD^
#也就是这个日志的文件的信息是通过两个命令来完全查看的
#=======1======================================================================
harvey@harvey-Virtual-Machine:~/demo4$ git log
commit 9aa4a88d227ece5d9079776991ded74e2e577bf8
Author: zhanghaiyu <[email protected]>
Date: Fri Apr 11 15:33:44 2014 +0800 第一次提交 Signed-off-by: zhanghaiyu <[email protected]>
#=======2======================================================================
harvey@harvey-Virtual-Machine:~/demo4$ git reflog
9aa4a88 HEAD@{0}: reset: moving to HEAD^
ba393f1 HEAD@{1}: commit: 第二次提交
9aa4a88 HEAD@{2}: commit (initial): 第一次提交

04-28 16:56