HEAD 上次提交的快照
INDEX 预期的下一次提交(暂存区)
Working Directory 工作区

为了更清晰地说明问题:

  • 我们假设现在提交了V1、V2、V3三版文件,并且现在三个区中都是V3
  • ~表示主目录 也可以是文件名

先回顾一下Instruction篇提到的有关resetcheckout撤销操作:

1. 取消暂存文件:
1
git reset HEAD [file]
2. 想要撤销修改,将文件还原成上次提交的样子
1
git checkout --[file]

接下来进一步学习有关撤销的操作和原理:

git reset --soft HEAD~

Head指向上一次提交的版本(V2)
移动HEAD整个分支的指向
(本质上是撤销了上一次git commit的命令)

git reset [--mixed] HEAD~

相当于以下三点:

  • 撤销暂存的东西
  • 暂存区变为V2
  • 撤销git add

git reset -hard HEAD~

  • 强制覆盖目录中的所有文件
  • 工作区的文件也变为V2

git reset file.txt

将file.txt从HEAD复制到索引中

git reset eb43 --file.txt

eb43就是V1
相当于三步:

  • 将工作目录的文件恢复到V1
  • 运行git add添加到索引
  • 再将工作区恢复到V3

reset也可以接受—patch,一块块取消暂存内容。

git checkout [branch]

只移动HEAD自身

checkout也接受—patch

参考文献:Git重置揭秘

陈山!!![星星眼]cover放小范大人,里面就放一张陈山吧~
zry