Git学习——Git重置

读《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

就可以还原到该提交了。

相应的操作也会记录到日志中