Git进阶:本地或远程仓库如何回滚到之前的某个commit

发布于:2024-12-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

在Git的使用过程中,我们经常会遇到需要回滚到之前某个commit的情况。无论是为了修复错误、撤销更改,还是为了重新组织代码,回滚到特定commit都是一个非常有用的技能。本文将介绍几种常用的回滚方法,帮助读者更好地掌握Git版本控制。

1. 使用git revert

git revert命令用于创建一个新的commit,该commit会撤销指定commit的更改。这种方法不会改变历史,而是在历史中添加一个新的commit来抵消之前的更改。

例如,要回滚到HEAD~3(即当前commit的前三个commit),可以执行以下命令:

git revert HEAD~3

这会打开默认的文本编辑器,要求你输入提交信息。输入完毕后保存并退出,Git将创建一个新的commit,撤销HEAD~3的更改。

2. 使用git reset

git reset命令用于将HEAD指针移回到指定的commit,并可以选择性地更改索引(暂存区)和工作目录。

如果希望保留工作目录的更改,但希望回滚到HEAD~3,可以使用--soft选项:

git reset --soft HEAD~3

这将回滚到HEAD~3,但保留工作目录中的更改。你可以继续添加新的更改并提交。

如果你想回滚到HEAD~3,并丢弃工作目录中的更改,可以使用--hard选项:

git reset --hard HEAD~3

请注意,使用--hard选项会丢弃工作目录中的所有更改,因此在执行此命令之前,请确保备份重要的工作成果。

3. 使用git revertgit reset的比较

  • git revert:创建一个新的commit来撤销之前的更改,不改变历史。适用于公共仓库,因为它不会破坏其他人的工作。
  • git reset:移动HEAD指针到指定commit,可以选择性地更改索引和工作目录。可能会改变历史,因此不适用于公共仓库。

4. 强制推送回滚到远程仓库

如果你已经回滚了本地仓库的commit,并希望将这些更改推送到远程仓库,可能会遇到推送被拒绝的情况,因为远程仓库仍然包含你希望回滚的commit。

在这种情况下,你可以使用git push命令的--force选项来强制推送更改:

git push --force origin your-branch-name

但是,请注意,强制推送会覆盖远程仓库的历史,可能会导致其他人遇到问题。因此,在执行此操作之前,请确保与团队成员进行充分的沟通。

5. 强制推送可能出现问题:remote: GitLab:You are not allowed to force push code to a protected branch on this project

原因

分支开启了受保护,未开启强制推送。

解决办法
将master分支解除保护。
步骤

使用管理员账号登陆
(1)进入gitlab中的项目: 设置(Settings)-> 仓库(Repository) -> 保护分支(Protected Branches)->(把保护的分支选择 unprotected)

再重新进行强制推送 git push -f,即可成功。

(2)当提交成功后,不要忘了重新将master分支加入保护。
进入gitlab中的项目:设置(Settings)-> 仓库(Repository) -> 保护分支(Protected Branches)-> 选择分支,Allowed to merge,Allowed to push(把保护的分支选择protect )

 

参考:Git进阶:如何回滚到之前的某个commit-百度开发者中心       remote: GitLab:You are not allowed to force push code to a protected branch on this project_remote: gitlab: you are not allowed to force push -CSDN博客 


网站公告

今日签到

点亮在社区的每一天
去签到