读《Git 权威指南》——笔记
书上是在这一章介绍游标 HEAD 的,但我觉得在上一章讲对象的时候介绍更为适合。
游标。当所在的分支有了新的提交的时候,游标会自动指向该提交。
可以向前移动,当然,也可以向后。才能称得上为游标。
首先,介绍一下重置。(即 reset)
1 | git reset a.txt
|
把刚 add 到暂存区的文件撤出暂存区
1 | git reset HEAD^
|
等同
1 | git reset --mixed HEAD^ |
工作区不变,暂存区退回到现在的引用的父提交,引用也会退一次。
1 | git reset --soft HEAD^ |
引用退回上一次提交(即父提交),工作区和暂存区不变
1 | git reset --hard HEAD^ |
替换引用、暂存区、工作区
当重置了的时候,用 git log 查看日志的时候发现,日志也一同消失了。
这个时候需要用到 reflog 来挽救错误的动作
1 | git reflog |
可以查看全部的操作记录。当然,也可以显示单一分支的操作记录
1 | git reflog show master
|
这里我们看到一个很不错的表达式: <refname>@{<n>} ,这个表达式的含义是引用 <refnamw> 之前第 <n> 次改变的 SHA1 哈希值。
当然,在第一行也有响应的哈希值。
现在我们想还原到哪个提交都可以了。
1 | git reset master@{1} |
或者
1 | git reflog show dbd3fa8
|
就可以还原到该提交了。
相应的操作也会记录到日志中