今天遇到一个情况,某个项目的代码,昨天被另外的同事修改了,且未测试的情况下合并了master分支上,今天上午发现task异常,于是排查到原因,先回退代码,步骤如下
1.使用命令或者在gitlab页面上查看需要回退到的版本号commitID
git log
日志显示如下:
commit bafbef5c3xxxxxxxxxxxxxxxxxxxxx (HEAD -> master, origin/master, origin/HEAD)
Merge: 249a5c9 ce44efe
Author: san.zhang <san.zhang@xxx.com>
Date: Mon Jul 17 17:30:04 2023 +0800
Merge remote-tracking branch 'origin/master' into master
commit 249a5c9xxxxxxxxxxxxxxxxxxxxx
Date: Mon Jul 17 17:29:45 2023 +0800
移除fastjson
commit ce44efxxxxxxxxxxxxxxxxxxxxxx (xxxxx)
Merge: 3d054be c6fdcc9
Author: si.li <si.li@xxx.com>
回退到commitID为ce44efxxxxxxxxxxxxxxxxxxxxxx 的版本上,操作如下:
git reset --hard ce44efxxxxxxxxxxxxxxxxxxxxxx
其中需要注意下不同参数的区别
-
–soft: 使用git reset --soft ,HEAD(当前分支)将被移动到指定的提交(commit),暂存区(Index)和工作目录不会被改变。这意味着在这个commit之后的所有提交都会保留在暂存区中,这样你就可以重新提交它们,或者根据需要修改它们。
-
–mixed: 这是git reset的默认模式,你可以使用git reset --mixed 或者简写为git reset 。在这种模式下,HEAD被移动到指定的提交,暂存区(Index)也会被重置,但工作目录不会被改变。这意味着在这个commit之后的所有提交都会从暂存区中移除,但它们仍然保留在工作目录中。你可以根据需要重新暂存和提交这些更改。
-
–hard: 使用git reset --hard ,HEAD被移动到指定的提交,暂存区(Index)和工作目录都会被重置。这意味着在这个commit之后的所有提交都将完全丢失,工作目录将恢复到这个commit的状态。这是一个危险的操作,因为它会永久删除未提交的更改,所以在执行此操作之前,请确保你没有未保存的工作。
总结:
–soft:仅移动HEAD,保留暂存区和工作目录。
–mixed(默认):移动HEAD,重置暂存区,保留工作目录。
–hard:移动HEAD,重置暂存区和工作目录,可能导致未提交的更改丢失。。
然后进行强推操作,将远程master分支回退到历史版本
git push -f origin master
这时候显示错误
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To http://xxxx:xxxx/xxxx/xxx.git
! [remote rejected] master -> master (pre-receive hook declined)
一般查找后发现,是因为gitlab中对master设置了保护,需要先解除保护,再推,推完后再加上保护
文章来源:https://uudwc.com/A/xG5jq
点击按钮“unprotect”,取消保护,再进行推送,发现正常,推送后再加上保护即可。文章来源地址https://uudwc.com/A/xG5jq