Help us learn about your current experience with the documentation. Take the survey.

撤销更改

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

代码中难免会出现错误。版本控制允许你通过撤销(revert)这些错误来修复它们。

当你撤销一个提交时,你会创建一个新的提交(撤销提交),它反转了 错误的更改,而不是从项目历史中抹去问题的存在。撤销提交 提供了清晰的审计跟踪,而不是留下一个空白处。撤销提交 遵循项目的访问控制和流程,并且:

  • Removes the lines added in the original commit.
  • Restores the lines removed in the original commit.
  • Restores the lines modified in the original commit to their previous state.

撤销不仅限于提交。如果错误的更改跨越多个提交,考虑 从合并请求中撤销所有更改,而不是逐个撤销提交。这种方法 提供了更清晰的审计跟踪。

撤销合并请求

合并请求合并后,你可以撤销该合并请求中的所有更改。

先决条件:

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

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

    在 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 撤销和撤销更改

从仓库中删除文本

永久删除意外提交的敏感或机密信息,确保 它在仓库历史中不再可访问。 将字符串列表替换为 ***REMOVED***

This action is irreversible. After rewriting history and running housekeeping, the changes are permanent. Be aware of the following impacts when redacting text from your repository:

  • Open merge requests might fail to merge and require manual rebasing.

  • This is a destructive operation. Existing local clones are incompatible with the updated repository and must be re-cloned.

  • Pipelines referencing old commit SHAs might break and require reconfiguration.

  • Historical tags and branches based on the old commit history might not function correctly.

  • Commit signatures are dropped during the rewrite process.

  • Commit hashes are updated because their content is updated by the redact operation.

  • 未合并的合并请求可能无法合并,需要手动变基。

  • 这是一个破坏性操作。现有的本地克隆与更新后的仓库不兼容,必须重新克隆。

  • 引用旧提交 SHA 的流水线可能会中断,需要重新配置。

  • 基于旧提交历史的历史标签和分支可能无法正常工作。

  • 提交签名在重写过程中会被丢弃。

  • 提交哈希被更新,因为其内容被删除操作更新。

虽然 GitLab 的删除功能可以移除暴露的密钥,但它也会:

  • Corrupts the Git history state.

  • Requires all developers to re-clone the repository after redaction.

  • Breaks features that depend on commit hashes, including:

    • Open merge requests.
    • Links to previous commits, which results in 404 errors.
  • 破坏 Git 历史状态。

  • 要求所有开发者在删除后重新克隆仓库。

  • 破坏依赖于提交哈希的功能,包括:

    • 未合并的合并请求。
    • 到先前提交的链接,导致 404 错误。

为了更好的仓库完整性,你应该:

这种方法:

  • Proactively prevents future secret leaks.

  • Maintains Git history while ensuring security compliance.

  • 主动防止未来的密钥泄露。

  • 保持 Git 历史的同时确保安全合规。

有关更多信息,请参阅 密钥推送保护

或者,要完全删除仓库中的特定文件,请参阅 删除 blobs

先决条件:

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

要从仓库中删除文本:

  1. 在左侧边栏,选择 搜索或跳转 并找到你的项目。
  2. 选择 设置 > 仓库
  3. 展开 仓库维护
  4. 选择 删除文本
  5. 在抽屉中,输入要删除的文本。 你可以使用正则表达式和 glob 模式。
  6. 选择 删除匹配的字符串
  7. 在确认对话框中,输入你的项目路径。
  8. 选择 是的,删除匹配的字符串
  9. 在左侧边栏,选择 设置 > 常规
  10. 展开 高级
  11. 选择 运行维护。等待至少 30 分钟让操作完成。
  12. 在同一 设置 > 常规 > 高级 部分,选择 修剪不可达对象。 此操作大约需要 5-10 分钟完成。

If the project containing the sensitive information has been forked, the housekeeping task may not be able to complete this redaction process to maintain the integrity of the special object pool repository which contains the forked data. For help, contact GitLab Support.

相关主题