Git版本回退与撤销修改

参考了廖雪峰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三种模式区别和使用场景

区别:

  1. --hard:重置位置的同时,直接将 working Tree工作目录index 暂存区repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

  2. --soft:重置位置的同时,保留working Tree工作目录index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

  3. --mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

作者:carway
链接: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:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

原文地址:https://www.cnblogs.com/144823836yj/p/12937360.html