参考了廖雪峰Git教程:
版本回退 https://www.liaoxuefeng.com/wiki/896043488029600/897013573512192
撤销修改 https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536
版本回退
HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
回退到上一个commit:
git reset --hard HEAD^
直接指定commit id也是可以的。
拓展:reset的三种模式
reset三种模式区别和使用场景
作者:carway区别:
--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
链接:https://www.jianshu.com/p/c2ec5f06cf1a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
重新回到最新版本:
git reset --hard 最新版本commit id
如果忘记了新版本commit id,可以通过
git reflog
查看。
撤销修改
撤销工作区修改
git checkout -- file
命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
撤销暂存区修改
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
git reset HEAD <file>
小结
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。