如果说 git revert 是一个撤销更改安全的方式,你可以将 git reset 看做一个 危险 的方式。当你用 git reset 来重设更改时(提交不再被任何引用或引用日志所引用),我们无法获得原来的样子——这个撤销是永远的。使用这个工具的时候务必要小心,因为这是少数几个可能会造成工作丢失的命令之一。
git reset 可以被用来移除提交快照,尽管它通常被用来撤销缓存区和工作目录的修改。不管是哪种情况,它应该只被用于 本地 修改——你永远不应该重设和其他开发者共享的快照,实际上 reset 一般用于本地缓存快照的回滚;
示例
# 编辑了hello.py和main.py
# 缓存了目录下所有文件
git add .
# 意识到hello.py和 main.py 中的修改,应该在不同的快照中提交
# 取消main.py缓存
git reset main.py
# 只提交hello.py
git commit -m "Make some changes to hello.py"
# 在另一份快照中提交main.py
git add main.py
git commit -m "Edit main.py"
一个正常的提交历史

git checkout b

git reset b

此时会发现 c、d 提交历史已经遗失了;