回退变更
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
代码中难免会出现错误。版本控制让我们能够通过还原它们来修复这些错误。
当你还原一个提交时,你会创建一个新的提交(一个 还原提交),这个提交会反转错误的更改,而不是从项目的历史记录中抹去这个问题的存在。还原提交提供了一条清晰的审计记录,而不是在之前提交的位置留下一个空白。还原提交遵循项目的访问控制和流程,并且:
- 移除原始提交中添加的行。
- 恢复原始提交中删除的行。
- 将原始提交中修改的行恢复到它们之前的状态。
还原不仅限于提交。如果错误的更改跨越多个提交,考虑还原合并请求中的所有更改,而不是逐个提交进行还原。这种方法提供了更清晰的审计记录。
还原合并请求
在合并请求合并后,你可以还原合并请求中的所有更改。
先决条件:
-
你必须在项目中拥有允许编辑合并请求和向存储库添加代码的角色。
-
项目必须使用合并方法 合并提交,在项目的 设置 > 合并请求 中设置。
在极狐GitLab 16.9 及更高版本中,如果满足以下条件之一,你可以从极狐GitLab UI 中还原快进的提交:
- 提交已被压缩,或者
- 合并请求包含一个单一的提交。
要还原合并请求 Example:
- 在左侧边栏中,选择 搜索或前往 并找到你的项目。
- 选择 代码 > 合并请求。
- 从次级菜单中,选择 已合并,并选择你的合并请求(这里是 Example)。
- 滚动到合并请求报告区域,找到显示 由...合并 信息的报告。
- 选择 还原。
- 在 还原到分支 中,选择要还原更改的分支。
- 要立即还原,不需要合并请求:
- 清除 启动新的合并请求。
- 选择 还原,Example 的还原完成。
- 要在新合并请求中审核还原而不是立即还原,选择 启动新的合并请求,然后:
- 填写还原合并请求的字段,然后选择 创建合并请求。
- 当合并请求合并时,Example 的还原完成。
在你还原 Example 合并请求后,还原 选项将不再显示。
还原提交
你可以将任何提交还原到以下位置之一:
- 当前分支。
- 一个新的合并请求。
先决条件:
- 你在项目中的角色必须允许你编辑合并请求和向存储库添加代码。
- 提交尚未被还原,因为在这种情况下不会显示 还原 选项。
操作步骤:
- 在左侧边栏中,选择 搜索或前往 并找到你的项目。
- 如果你知道包含提交的合并请求:
- 选择 代码 > 合并请求,然后选择你的合并请求。
- 选择 提交,然后选择要还原的提交的标题。这将显示合并请求上下文中的提交。
- 在次级菜单下方,极狐GitLab 显示消息 查看提交 00001111,其中 00001111 是提交的哈希值。选择提交哈希以显示提交页面。
- 如果你不知道提交来源于哪个合并请求:
- 选择 代码 > 提交。
- 选择提交的标题以显示提交的完整信息。
- 在右上角,选择 选项,然后选择 还原。
- 在 还原到分支 中,选择要还原更改的分支。
- 要立即还原,不需要合并请求:
- 清除 启动新的合并请求。
- 选择 还原。
- 要在新合并请求中审核还原而不是立即还原,选择 启动新的合并请求,然后:
- 填写还原合并请求的字段,然后选择 创建合并请求。
- 当合并请求合并时,提交的还原完成。
将合并提交还原到不同的父提交
当你还原一个合并提交时,你合并到的分支(通常是 main)总是第一个父提交。要将合并提交还原到不同的父提交,你必须从命令行还原提交,参见使用 Git 还原和撤销更改。
从存储库中编辑文本
History
- 在极狐GitLab 17.1 中引入,使用名为 rewrite_history_ui 的功能标志。默认禁用。
- 在极狐GitLab 17.2 中,在 JihuLab.com 上启用。
- 在极狐GitLab 17.3 中,在私有化部署上启用。
- GA 于极狐GitLab 17.9。特性标志 rewrite_history_ui 已移除。
永久删除意外提交的敏感或机密信息,确保它不再可在存储库的历史记录中访问。将字符串列表替换为 ***REMOVED***。
**此操作不可逆。** 重写历史并运行维护后,修改是永久的。在从存储库中编辑文本时,请注意以下影响:
- 打开的合并请求可能无法合并并需要手动重新基线。
- 现有的本地克隆与更新后的存储库不兼容,必须重新克隆。
- 引用旧提交 SHA 的流水线可能会中断并需要重新配置。
- 基于旧提交历史的历史标签和分支可能无法正常运行。
- 提交签名在重写过程中被删除。
或者,要完全删除存储库中的特定文件,请参见移除 blob。
先决条件:
- 你必须拥有项目的所有者角色。
要从存储库中编辑文本:
- 在左侧边栏中,选择 搜索或前往 并找到你的项目。
- 选择 设置 > 存储库。
- 展开 存储库维护。
- 选择 编辑文本。
- 在抽屉中,输入要编辑的文本。你可以使用正则表达式和 glob 模式。
- 选择 编辑匹配字符串。
- 在确认对话框中,输入你的项目路径。
- 选择 是,编辑匹配字符串。
- 在左侧边栏中,选择 设置 > 常规。
- 展开 高级。
- 选择 运行维护。
相关主题
- 官方 git revert 文档
- 使用 Git 撤销更改
- 使用提交 API 还原提交
- 如何变更日志处理已还原的提交