0%

SourceTree 回滚项目(本地回滚和远程回滚)

在使用SourceTree来管理Git项目的时候,有时需要回滚项目,具体的回滚操作包含本地回滚和远程回滚。建议回滚前先做好代码备份。

本地回滚

使用命令git reset进行本地回滚操作,本地回滚操作一步即可完成。

1
2
3
4
5
# 回退到指定的提交版本,22f8aae 为某次提交的提交号。
$ git reset --hard   22f8aae

#(回退3次提交)
$ git reset --hard HEAD~3 //(回退3次提交)

–hard:本地的源码和本地未提交的源码都会回退到某个版本,包括commit内容,和git自己对代码的索引都会回退到某个版本,any local changes will be lost。
–soft:保留源码,只能回退到commit信息到某个版本,不涉及到index的回退,如果还需要提交,直接commit即可。比如我选择soft方式来进行回退,我的本地代码和本地新添加的尚未commit的代码都没有改变。
–mixed:会保留源码,只是将git commit和index信息回退到某个版本。

远程回滚

远程回滚的操作流程是,先回滚本地操作,然后将本地的修改强行push到远程仓库。具体操作分为以下2步:

1.在需要回滚的提交记录上右键选择将master重置到这次提交,选择重置(强行合并)到需要回滚的历史节点。

2.打开终端,cd到项目目录,执行git push origin master -f,即可。
origin:远程仓库名
master:分支名称
-f:force,意为强制、强行

3.如果出现 ! [remote rejected] master -> master (pre-receive hook declined)错误,需要去gitlab网站去除master分支保护,才可以强制推送。
具体错误信息如下:

1
2
3
4
5
6
$ git push origin master -f
总共 0 (差异 0),复用 0 (差异 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To https://test.com.cn/test.git
! [remote rejected] master -> master (pre-receive hook declined)
error: 推送一些引用到 'https://test.com.cn/test.git' 失败

需要去到gitlab的网站上去除master分支保护。

参考链接

git 远程代码回滚master
使用sourceTree回滚git代码到历史节点