gitlab 回滚

本内容转载至:git push 操作代码回滚

(1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚.

(2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚.

这些开发中很常见的问题,所以 git 的取消提交,回退甚至返回上一版本都是特别重要的.

大致分为下面2种情况:

1.没有 push

这种情况发生在你的本地代码仓库,可能你 add,commit 以后发现代码有点问题,准备取消提交,用到下面命令:

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

上面常见三种类型

--mixed

会保留源码,只是将 git commit 和 index 信息回退到了某个版本.

git reset 默认是 --mixed 模式

git reset --mixed 等价于 git reset

--soft

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

--hard

源码也会回退到某个版本,commit 和 index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

当然有人在 push 代码以后,也使用 reset --hard 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上 commit,index 都没有变,当你把本地代码修改完提交的时候你会发现权是冲突.....

所以,这种情况你要使用下面的方式

2.已经 push

对于已经把代码 push 到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

git revert 用于反转提交,执行 evert 命令时要求工作树必须是干净的.

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

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

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

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61 通常,前几位即可

git revert c011eb3

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

此时本地代码即为回滚的指定版本,需强制 push:git push -f(如果不强制 push,只是把代码回滚到当前版本,如果此时去修改代码,当你要提交的时候,会先让你 pull,而 pull 下来的代码还是你后面提交的所有版本的代码)

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

第一:

上面我们说的如果你已经push到线上代码库, reset 删除指定 commit 以后,你 git push 可能导致一大堆冲突.但是 revert 并不会.

第二:

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

第三:

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


小提示

如有侵权请邮件通知