作用:在提交层面上,reset 将一个分支的末端指向另一个提交。
常用标记
--soft – 缓存区和工作目录都不会被改变
--mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
--hard – 缓存区和工作目录都同步到你指定的提交
场景:
- 开发合并发生冲突时,想和仓库代码一致,完全舍弃你没有提交的改动,使用git reset HEAD --hard
作用:切换分支或恢复工作区文件
常用命令
- git checkout hotfix
- git checkout file
- git checkout HEAD~2 //快速查看旧版本
作用:撤销一个/多个提交的同时会创建一个新的提交
常用命令:
- git revert
场景:
- 提交一个更新 commit id 为2e921a35020d022284d257464297d4a22c7f8b56
- 执行命令 git revert 2e921a35020d022284d257464297d4a22c7f8b56
- 保存即可
说明:
- 撤销生成的提交是可以撤销的
先提交文件A,再撤销提交文件A(A删除),最后撤销"撤销操作",文件A可以恢复 - 撤销并不一定是最新的一次提交
命令 | 作用域 | 情景 | 工作目录 | 暂存区 | 提交历史 |
---|---|---|---|---|---|
Reset --soft | 提交层面 | 在私有分支上舍弃一些没有提交的更改 | 不影响 | 不影响 | 影响 |
Reset --mixed | 提交层面 | -- | 不影响 | 影响 | 影响 |
Reset --hard | 提交层面 | -- | 影响 | 影响 | 影响 |
Checkout | 提交层面 | 切换分支或查看旧版本 | 影响 | 不影响 | 不影响 |
revert | 提交层面 | 将文件从缓存区中移除 | 影响 | 提示保存 | 不影响 |
Reset | 文件层面 | 将文件从缓存区中移除 | 不影响 | 影响 | 影响 |
Checkout | 文件层面 | 舍弃工作目录中的更改 | 影响 | 不影响 | 不影响 |
- git revert 可以用在公共分支上,git reset 应该用在私有分支上。
- git revert 不支持文件层面的操作