结构
- disk 本地硬盘
- staging 缓存区域
- local 本地的git
- remote 远端的git

1. 撤销硬盘上的修改
git restore <changed_file>

2. 使用了add之后
2.1撤销add
git restore --staged <changed_file>

2.2撤销add + 本地
HEAD为最近的一次修改
git checkout HEAD <changed_file>

3. 使用了commit之后
- 注意点: reset最好在自己的个人分支使用
- 回退2个使用HEAD~2就行
3.1撤销最近的一次commit
git reset --soft HEAD~1

3.2撤销commit + add
git reset --mixed HEAD~1

3.3撤销commit + add + 本地(注意谨慎使用!!!)
git reset --hard HEAD~1

3.4撤销实际上是增加一个commit, 但是commit的作用是相反的, 如果是推送到公共分支, 推荐使用!!!
可以撤销中间任意一个commit
# 撤销上一个commit
git revert HEAD
# 撤销指定的commit
git revert 70a0

总结:
对于公有分支的推送, 不要执行reset撤销操作, 要使用revert添加一个相反的commit来实现撤销