回退变更

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: JihuLab.com, 私有化部署

代码中难免会出现错误。版本控制让我们能够通过还原它们来修复这些错误。

当你还原一个提交时,你会创建一个新的提交(一个 还原提交),这个提交会反转错误的更改,而不是从项目的历史记录中抹去这个问题的存在。还原提交提供了一条清晰的审计记录,而不是在之前提交的位置留下一个空白。还原提交遵循项目的访问控制和流程,并且:

  • 移除原始提交中添加的行。
  • 恢复原始提交中删除的行。
  • 将原始提交中修改的行恢复到它们之前的状态。

还原不仅限于提交。如果错误的更改跨越多个提交,考虑还原合并请求中的所有更改,而不是逐个提交进行还原。这种方法提供了更清晰的审计记录。

还原合并请求#

在合并请求合并后,你可以还原合并请求中的所有更改。

先决条件:

  • 你必须在项目中拥有允许编辑合并请求和向存储库添加代码的角色。

  • 项目必须使用合并方法 合并提交,在项目的 设置 > 合并请求 中设置。

    在极狐GitLab 16.9 及更高版本中,如果满足以下条件之一,你可以从极狐GitLab UI 中还原快进的提交:

    • 提交已被压缩,或者
    • 合并请求包含一个单一的提交。

要还原合并请求 Example

  1. 在左侧边栏中,选择 搜索或前往 并找到你的项目。
  2. 选择 代码 > 合并请求
  3. 从次级菜单中,选择 已合并,并选择你的合并请求(这里是 Example)。
  4. 滚动到合并请求报告区域,找到显示 由...合并 信息的报告。
  5. 选择 还原
  6. 还原到分支 中,选择要还原更改的分支。
  7. 要立即还原,不需要合并请求:
    1. 清除 启动新的合并请求
    2. 选择 还原Example 的还原完成。
  8. 要在新合并请求中审核还原而不是立即还原,选择 启动新的合并请求,然后:
    1. 填写还原合并请求的字段,然后选择 创建合并请求
    2. 当合并请求合并时,Example 的还原完成。

在你还原 Example 合并请求后,还原 选项将不再显示。

还原提交#

你可以将任何提交还原到以下位置之一:

  • 当前分支。
  • 一个新的合并请求。

先决条件:

  • 你在项目中的角色必须允许你编辑合并请求和向存储库添加代码。
  • 提交尚未被还原,因为在这种情况下不会显示 还原 选项。

操作步骤:

  1. 在左侧边栏中,选择 搜索或前往 并找到你的项目。
  2. 如果你知道包含提交的合并请求:
    1. 选择 代码 > 合并请求,然后选择你的合并请求。
    2. 选择 提交,然后选择要还原的提交的标题。这将显示合并请求上下文中的提交。
    3. 在次级菜单下方,极狐GitLab 显示消息 查看提交 00001111,其中 00001111 是提交的哈希值。选择提交哈希以显示提交页面。
  3. 如果你不知道提交来源于哪个合并请求:
    1. 选择 代码 > 提交
    2. 选择提交的标题以显示提交的完整信息。
  4. 在右上角,选择 选项,然后选择 还原
  5. 还原到分支 中,选择要还原更改的分支。
  6. 要立即还原,不需要合并请求:
    1. 清除 启动新的合并请求
    2. 选择 还原
  7. 要在新合并请求中审核还原而不是立即还原,选择 启动新的合并请求,然后:
    1. 填写还原合并请求的字段,然后选择 创建合并请求
    2. 当合并请求合并时,提交的还原完成。

将合并提交还原到不同的父提交#

当你还原一个合并提交时,你合并到的分支(通常是 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

先决条件:

  • 你必须拥有项目的所有者角色。

要从存储库中编辑文本:

  1. 在左侧边栏中,选择 搜索或前往 并找到你的项目。
  2. 选择 设置 > 存储库
  3. 展开 存储库维护
  4. 选择 编辑文本
  5. 在抽屉中,输入要编辑的文本。你可以使用正则表达式和 glob 模式。
  6. 选择 编辑匹配字符串
  7. 在确认对话框中,输入你的项目路径。
  8. 选择 是,编辑匹配字符串
  9. 在左侧边栏中,选择 设置 > 常规
  10. 展开 高级
  11. 选择 运行维护