diff --git a/app_dart/lib/src/service/scheduler.dart b/app_dart/lib/src/service/scheduler.dart
index 17cf78f..387f5ee 100644
--- a/app_dart/lib/src/service/scheduler.dart
+++ b/app_dart/lib/src/service/scheduler.dart
@@ -425,6 +425,10 @@
     // the PR and to the merge group, and so it must be completed in both cases.
     final lock = await lockMergeGroupChecks(slug, pullRequest.head!.sha!);
 
+    // Track if we should unlock the merge group lock in case of non-fusion or
+    // revert bots.
+    bool unlockMergeGroup = false;
+
     final ciValidationCheckRun = await createCiYamlCheckRun(pullRequest, slug);
 
     log.info('Creating presubmit targets for ${pullRequest.number}');
@@ -433,12 +437,16 @@
     try {
       final sha = pullRequest.head!.sha!;
       isFusion = await fusionTester.isFusionBasedRef(slug, sha);
+      if (!isFusion) {
+        unlockMergeGroup = true;
+      }
 
       // Both the author and label should be checked to make sure that no one is
       // attempting to get a pull request without check through.
       if (pullRequest.user!.login == config.autosubmitBot &&
           pullRequest.labels!.any((element) => element.name == Config.revertOfLabel)) {
         log.info('Skipping generating the full set of checks for revert request.');
+        unlockMergeGroup = true;
       } else {
         final presubmitTargets = isFusion
             ? await getTestsForStage(pullRequest, CiStage.fusionEngineBuild)
@@ -476,7 +484,7 @@
     await closeCiYamlCheckRun('PR ${pullRequest.number}', exception, slug, ciValidationCheckRun);
 
     // The 'lock' will be unlocked later in processCheckRunCompletion after all engine builds are processed.
-    if (!isFusion) {
+    if (unlockMergeGroup) {
       await unlockMergeGroupChecks(slug, pullRequest.head!.sha!, lock, exception);
     }
     log.info(
diff --git a/app_dart/test/service/scheduler_test.dart b/app_dart/test/service/scheduler_test.dart
index 52804b2..7ea5997 100644
--- a/app_dart/test/service/scheduler_test.dart
+++ b/app_dart/test/service/scheduler_test.dart
@@ -1653,6 +1653,38 @@
         );
       });
 
+      test('Unlocks merge group on revert request.', () async {
+        fakeFusion.isFusion = (_, __) => true;
+
+        final PullRequest releasePullRequest = generatePullRequest(
+          labels: [IssueLabel(name: 'revert of')],
+        );
+
+        releasePullRequest.user = User(login: 'auto-submit[bot]');
+
+        await scheduler.triggerPresubmitTargets(pullRequest: releasePullRequest);
+        expect(
+          verify(
+            mockGithubChecksUtil.updateCheckRun(
+              any,
+              any,
+              any,
+              status: captureAnyNamed('status'),
+              conclusion: captureAnyNamed('conclusion'),
+              output: captureAnyNamed('output'),
+            ),
+          ).captured,
+          <Object?>[
+            CheckRunStatus.completed,
+            CheckRunConclusion.success,
+            null,
+            CheckRunStatus.completed,
+            CheckRunConclusion.success,
+            null,
+          ],
+        );
+      });
+
       test('filters out presubmit targets that do not exist in main and do not filter targets not in main', () async {
         const String singleCiYaml = r'''
 enabled_branches:
