==============================
分支游标master
==============================
引用 refs/heads/master 在有新的提交发生的时候,指向新的提交。
(1) 将master游标重置到旧的提交上(注意:使用了--hard 参数,会破坏工作区未提交的改动)
$ git reset --hard HEAD^
(2) 重置命令不仅可以重置到前一次提交,而且还可以使用提交ID重置到任何一次提交
git reset --hard 9e8a761
使用重置命令会丢弃历史,即曾经的修改会消失。
=============================
用reflog 挽救错误的重置
=============================
(1) 查看master分支的日志文件
$ tail -5 .git/logs/refs/heads/master
(2) 使用git reflog 命令的子命令可以显示此文件的内容
$ git reflog show master | head -5
(3) 重置 master 为两次改变之前的值
$ git reset --hard master@{2}
(4) 使用--hard参数 $ git reset --hard <commit>
替换引用的指向:引用指向新的提交ID
替换暂存区:暂存区的内容和引用指向的目录树一致
替换工作区:工作区的内容变的和暂存区一致,也和HEAD所指向的目录树内容相同
(5) git reset --soft <commit>
只更改引用的指向,不改变工作区和暂存区
(6) 使用参数 --mixed 或不使用参数(默认为--mixed)
更改引用的指向及重置暂存区,不改变工作区
(7) git reset
使用HEAD指向的目录树重置暂存区,但是不更改工作区
(8) git reset HEAD
使用HEAD指向的目录树重置暂存区,但是不更改工作区
(9) git reset -- filename
仅将文件filename的改动撤出暂存区,其它文件不变
(10)git reset HEAD filename
仅将文件filename的改动撤出暂存区,其它文件不变
(11)git reset HEAD^
工作区不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次
(12)git reset --mixed HEAD^
工作区不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次
(13)git reset --hard HEAD^
彻底撤销最近的提交。引用回退到上一次,而且工作区和暂存区都会回退到上一次提交的状态。
自上一次以来的提交丢失。