美文网首页
git回退版本

git回退版本

作者: 蜗牛Coming | 来源:发表于2019-11-18 14:17 被阅读0次

    前话:在vscode中,安装git History插件,安装之后就可以用F1,选择Git:View History(git log),即可看到git的提交记录。
    在每一行的最后面,就是commit_id

    git reset

    如果回退一个只是commit的,并没有push到远端分支的提交:
    则直接执行

    git reset --hard commit_id
    //回退到commit_id的这次提交
    //或者
    git reset --hard HEAD^
    //回退到上一次提交
    //HEAD 等同于当前分支的最新的一次commit提交id
    //HEAD^ 是上一次提交
    

    注:
    如果执行git reset --hard HEAD^ 显示More?
    这是因为在windows的cmd控制台中换行默认符是^,所以More?的意思是问你下一行是否需要再输入,^符号就被当做换行符了。
    解决方法:

    //加引号
    git reset --hard "HEAD^"
    //加^
    git reset --hard HEAD^^
    //换成~
    git reset --hard HEAD~
    git reset --hard HEAD~1
    //~后面的数字表示回退几次提交,默认是一次
    

    另外:
    git reset 还有以下用法:
    git reset --soft
    git reset --mixed
    区别就是:
    使用--soft就仅仅将头指针恢复,已经add的缓存以及工作空间的所有东西都不变。也就是执行了git reset --soft 就相当于只回退了git commit -m 这一步,改动的文件已经在暂存区了。
    使用--mixed,就将头指针恢复,已经add的缓存也会丢失掉,工作空间的代码什么的是不变的。也就是执行了git reset --mixed 就相当于回退到了git add之前,改动的文件还在工作区,没有add到暂存区。
    使用--hard,一切就全都恢复了,头指针恢复,add的缓存消失,工作空间的代码什么的也恢复到以前状态。也就是相当于你啥都没干过,工作区也没有了

    另外,如果已经push到远端了,怎么回退?
    依旧是先在本地回退,然后推到远端。
    但是如果直接push的话,会push失败,因为本地的版本落后于远端的版本。
    那就只有强退,加个--force参数

    git push origin <branch> --force
    
    

    git revert

    回退版本还可以用git revert

    如果回退的是一个只commit还没有push到远端的操作:
    git revert commit_id 操作不会删除commit_id这次提交记录,并且还会新增一个新的revert的提交记录。

    举个例子:
    如果你依次有commit_id为a、b、c三次提交记录,并且a和b都已经提交到远端,c还没有push到远端,现在想撤销c的改动,
    则执行git revert c,然后会生成一条d的commit_id,记录你revert了c。
    然后你执行git status,会告诉你你有2次commit没有push。
    然后你执行push到远端,就会记录下来你的c、d两次提交。

    如果你revert的是已经push到远端的提交,会在工作区报冲突,需要你手动撤销你revert分支之后的改动,然后再次add,commit,push就可以了。

    举个例子:
    如果你依次有commit_id为a、b、c三次提交记录,并且都已经提交到远端,现在想撤销b之后的改动,
    则执行git revert b,然后工作区会报冲突,报的是a之后的改动和当前的改动有冲突,可以选择采用传入的更改,然后接着add,commit,push就可以了。

    注意:
    git reset 后面跟的commit_id 是回滚这次提交的操作
    git revert 后面跟的commit_id 是回滚这次提交

    相关文章

      网友评论

          本文标题:git回退版本

          本文链接:https://www.haomeiwen.com/subject/rxtbictx.html