恩蓝号

gitlab回滚到指定版本,git回滚后会不会删除之前的版本

git回滚到任意版本

一、先显示提交的log (-3为显示最近的3条记录)

$ git log -3commit 4dc08bb8996a6ee02fAuthor: Mark <xxx@xx.com>Date: Wed Sep 7 08:08:53 2016 +0800 xxxxxcommit 9cac9ba76574da2167Author: xxx<xx@qq.com>Date: Tue Sep 6 22:18:59 2016 +0800 improved the requstcommit e377f60e28c8b84158Author: xxx<xxx@qq.com>Date: Tue Sep 6 14:42:44 2016 +0800 changed the password from empty to max123

二、回滚到指定的版本(soft、hard、mixed参数的区别在文章最后)

git reset --hard e377f60e28c8b84158

三、强制提交(-f 表示force 强制提交)

git push -f origin master

通常这一步提交会报错,因为分支是受保护的,不允许强制覆盖提交,这时候登录gitLab,找到要强制提交的项目,点击页面最右边的设置,找到protected branches

然后点击 unprotect 解除保护

然后再执行上面的强制提交命令,就可以提交成功了。

提交成功以后记得把分支保护的设置再加上,以免误操作了 后悔莫及

四、说明

git reset --hard e377f60e28c8b84158 参数说明

Parameterssoft

--soft参数告诉Git重置HEAD到另外一个commit,但也到此为止。如果你指定--soft参数,Git将停止在那里而什么也不会根本变化。这意味着index,working copy都不会做任何变化,所有的在original HEAD和你重置到的那个commit之间的所有变更集都放在stage(index)区域中。

 

  2.hard

--hard参数将会blow out everything.它将重置HEAD返回到另外一个commit(取决于~12的参数),重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:git reflog命令了。makes everything match the commit you have reset to.你的所有本地修改将丢失。如果我们希望彻底丢掉本地修改但是又不希望更改branch所指向的commit,则执行git reset --hard = git reset --hard HEAD. i.e. don't change the branch but get rid of all local changes.另外一个场景是简单地移动branch从一个到另一个commit而保持index/work区域同步。这将确实令你丢失你的工作,因为它将修改你的work tree!

  3.mixed(default)

--mixed是reset的默认参数,也就是俭朴的柚子不指定任何参数时的参数。它将重置HEAD到另外一个commit,并且重置index以便和HEAD相匹配,但是也到此为止。working copy不会被更改。所有该branch上从original HEAD(commit)到你重置到的那个commit之间的所有变更将作为local modifications保存在working area中,(被标示为local modification or untracked via git status),但是并未staged的状态,你可以重新检视然后再做修改和commit

免责声明:文章源自网络,版权归原作者所有,如有侵犯联系删除。

当前位置:首页 > 编程知识 » 2023-03-03 12:16:04

猜你喜欢


n切换node版本,node新版本

使用n管理Node版本 安装下载删除某个版本切换版本以指定的版本来执行脚本 管理 Node 版本的工具有 n 和 nvm,个人比较喜欢使用...