Git回滚

一、没有push --- reset

只:add ,commit,没有 push

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

  • --mixed

    • 会保留源码,只是将git commit和index 信息回退到了某个版本.
    • git reset 默认是 --mixed 模式 ,git reset --mixed 等价于 git reset
  • --soft

    • 保留源码,只回退commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.
  • --hard

    • 源码也会回退到某个版本,commit和index 都回回退到某个版本。
    • 注意,这种方式是改变本地代码仓库源码
$ git reset [ --mixed | --soft | --hard ] commit(想要回滚到的某个节点的commit号)

二、已经push --- revert

已经 push 到线上仓库,需要同时回退线上仓库和本地代码。

revert

  • git revert 命令要求工作树必须是干净的.

  • git revert 用一个新提交来消除一个历史提交所做的任何修改.

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。

revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
通常,前几位即可
git revert c011eb3

git revert:是用一次新的commit来回滚之前的commit,
git reset:是直接删除指定的commit

看似达到的效果是一样的,其实完全不同.

  • 第一: 如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突,但是revert 并不会。

  • 第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里。但是revert 方向提交的commit 并不会出现在历史分支里。

  • 第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

参考:git reset revert 回退回滚取消提交返回上一版本

你可能感兴趣的:(Git回滚)