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

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

1. 使用git revert

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

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

bash 复制代码
git revert HEAD~3

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

2. 使用git reset

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

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

bash 复制代码
git reset --soft HEAD~3

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

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

bash 复制代码
git reset --hard HEAD~3

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

3. 使用git revertgit reset的比较

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

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

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

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

bash 复制代码
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博客

相关推荐
baiyu3321 小时前
成为git砖家(13): 使用git am清理EasyCNN仓库
git
弘毅 失败的 mian21 小时前
Git 初识
经验分享·笔记·git
摇滚侠21 小时前
零基础小白自学 Git_Github 教程,IDEA 中使用 Git 基础,rebase 和 merge 的区别,笔记16
笔记·git·github
cipher21 小时前
删库之夜V2·天网恢恢
服务器·数据库·git
小生不才yz1 天前
(二)日常工作流 - git mv 命令的使用
git
一点事1 天前
git:推送本地项目到远程仓库进行管理(完整流程)
git
小镇学者1 天前
【PHP】macos 系统 git pull 时 报错File name too long问题
git·macos·php
艾莉丝努力练剑1 天前
【Git:企业级开发模型】Git企业级Git工作流实战:基于Git Flow的分支模型与开发流程
服务器·git·ubuntu·gitee·centos·powershell·企业级开发模型
%KT%1 天前
Git版本管理
git
铃汐留1 天前
Git基本命令与使用自查
git