• git代码回退


    情况1、还没有push
    可能 git add ,commit以后发现代码有点问题,想取消提交,用:

    reset
    git reset [--soft | --mixed | --hard]

      eg:
      git reflog
      git reset --hard Obfafd

    --soft  :保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
    --mixed :会保留源码,只是将git commit和index 信息回退到了某个版本. git reset 默认是 --mixed 模式; git reset --mixed等价于git reset
    --hard :源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

    push代码以后,不能再使用git reset --hard <commit...> 回退代码到某个之前版本,因为这样会有一个问题,你线上的代码没有变,
    线上commit,index都没有变,当你把本地(线下)代码修改完提交的时候全是冲突.....

    情况2、已经push
    此时若想回退本地代码也想同时回退线上代码,将线上代码回滚到某个指定的版本,使线上线下代码保持一致.使用:

    git revert c011eb3c(哈希值)

    git revert用于反转提交,执行evert命令时要求工作树必须是干净的.
    git revert用一个新提交来消除一个历史提交所做的任何修改.
    revert之后你的本地代码也会回滚到指定的历史版本,这时你再git push即可以把线上的代码更新.(这里不会像reset造成冲突的问题)

    git revert注意事项:

    1.使用revert HEAD是撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次
    的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的
    2.使用revert HEAD~1 表示撤销最近2次提交,这个数字是从0开始的,如果你之前撤销过产生了commi id,那么也会计算在内的。
    如果使用revert撤销的不是最近一次提交,那么一定会有代码冲突,需要你合并代码,合并代码只需要把当前的代码全部去掉,保留之前版本的代码就可以了.


    revert与reset的不同之处:
    1.git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
    2.上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
    3.如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
    4.reset是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD (版本)是一直向前的.所以,当你用revert回退之后,所有人pull之后,他们的代码也自动的回退了。 

    ==========================

    方法2:

    也可以:
      git reflog
      git reset --hard Obfafd
      git push -f
    强制推送到远程分支;注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

  • 相关阅读:
    变量属性
    String类
    Random类
    Scanner类
    文本与文本域对齐
    Java list集合排序
    float属性影响后续元素排版问题
    查询满足条件的最新数据(逐步优化,mysql、达梦数据库)
    关于select下拉框选择触发事件
    JQuery获取父,子,兄弟节点
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/8076452.html
Copyright © 2020-2023  润新知