diff --git a/lib/config/__snapshots__/migration.spec.ts.snap b/lib/config/__snapshots__/migration.spec.ts.snap
index 85fcbd37bb00ed05843b828c734ba3f1245ca6f0..50add5714023bdd88b7fca012104f2e05461d4a4 100644
--- a/lib/config/__snapshots__/migration.spec.ts.snap
+++ b/lib/config/__snapshots__/migration.spec.ts.snap
@@ -149,6 +149,7 @@ Object {
   "separateMajorReleases": true,
   "separateMinorPatch": true,
   "suppressNotifications": Array [
+    "lockFileErrors",
     "deprecationWarningIssues",
   ],
   "travis": Object {
diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts
index 246069ec48a8f8ea41ec0d920a327a4f7e1b062c..10b6eed37baf637f4fae58f5b51210b792bf8965 100644
--- a/lib/config/definitions.ts
+++ b/lib/config/definitions.ts
@@ -1694,7 +1694,6 @@ const options: RenovateOptions[] = [
     default: ['deprecationWarningIssues'],
     allowedValues: [
       'prIgnoreNotification',
-      'prEditNotification',
       'branchAutomergeFailure',
       'lockFileErrors',
       'artifactErrors',
diff --git a/lib/config/migration.spec.ts b/lib/config/migration.spec.ts
index a34b97b5269dd5633a76e737a494090cd1b94692..82e3cc4e0ef18a689e67dd16bacf490f48273ae4 100644
--- a/lib/config/migration.spec.ts
+++ b/lib/config/migration.spec.ts
@@ -32,6 +32,7 @@ describe('config/migration', () => {
         gitFs: false,
         separateMajorReleases: true,
         separatePatchReleases: true,
+        suppressNotifications: ['lockFileErrors', 'prEditNotification'],
         automerge: 'none' as never,
         automergeMajor: false,
         automergeMinor: true,
diff --git a/lib/config/migration.ts b/lib/config/migration.ts
index 5e25e4acf7c7b8154488139518cc548103c6bf2f..4c82f73aa2d0ae4e1037b62ddd5ed462a2099922 100644
--- a/lib/config/migration.ts
+++ b/lib/config/migration.ts
@@ -76,6 +76,13 @@ export function migrateConfig(
           );
         }
         delete migratedConfig.pathRules;
+      } else if (key === 'suppressNotifications') {
+        if (is.nonEmptyArray(val) && val.includes('prEditNotification')) {
+          isMigrated = true;
+          migratedConfig.suppressNotifications = migratedConfig.suppressNotifications.filter(
+            (item) => item !== 'prEditNotification'
+          );
+        }
       } else if (key === 'gomodTidy') {
         isMigrated = true;
         if (val) {
diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index d73c3aa658c8a7c8cb820c8f5c9ff149f30dc95a..d1c14f354010d0b02ced70e1d7b61aa099be6e17 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -190,6 +190,7 @@ describe('workers/branch', () => {
       platform.getBranchPr.mockResolvedValueOnce({
         state: PR_STATE_OPEN,
         isModified: true,
+        body: '**Rebasing**: something',
       } as never);
       const res = await branchWorker.processBranch(config);
       expect(res).toEqual('pr-edited');
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index a23830b93321cd6240a5634c766aaa0090b87c5f..c481e20a5f463441c3f83a84d3e27e36bb0d0c81 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -48,6 +48,8 @@ function rebaseCheck(config: RenovateConfig, branchPr: any): boolean {
   return titleRebase || labelRebase || prRebaseChecked;
 }
 
+const rebasingRegex = /\*\*Rebasing\*\*: .*/;
+
 export async function processBranch(
   branchConfig: BranchConfig,
   prHourlyLimitReached?: boolean
@@ -158,7 +160,6 @@ export async function processBranch(
           );
           throw new Error(REPOSITORY_CHANGED);
         }
-        const topic = 'PR has been edited';
         if (
           branchPr.isModified ||
           (branchPr.targetBranch &&
@@ -166,36 +167,17 @@ export async function processBranch(
         ) {
           logger.debug({ prNo: branchPr.number }, 'PR has been edited');
           if (masterIssueCheck || config.rebaseRequested) {
-            if (config.dryRun) {
-              logger.info(
-                'DRY-RUN: Would ensure PR edited comment removal in PR #' +
-                  branchPr.number
-              );
-            } else {
-              // Remove any "PR has been edited" comment only when rebasing
-              await platform.ensureCommentRemoval({
-                number: branchPr.number,
-                topic,
-              });
-            }
+            logger.debug('Manual rebase has been requested for PR');
           } else {
-            let content = emojify(
-              `:construction_worker: This PR has received other commits, so Renovate will stop updating it to avoid conflicts or other problems.`
+            const newBody = branchPr.body?.replace(
+              rebasingRegex,
+              '**Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found.'
             );
-            content += ` If you wish to abandon your changes and have Renovate start over you may click the "rebase" checkbox in the PR body/description.`;
-            content += `\n\nIf you think this comment is in error and the branch is *not* modified, try deleting this comment. If it comes back again the next time Renovate runs, please submit an issue or seek config help.`;
-            if (!config.suppressNotifications.includes('prEditNotification')) {
-              if (config.dryRun) {
-                logger.info(
-                  'DRY-RUN: ensure comment in PR #' + branchPr.number
-                );
-              } else {
-                await platform.ensureComment({
-                  number: branchPr.number,
-                  topic,
-                  content,
-                });
-              }
+            if (newBody !== branchPr.body) {
+              logger.debug(
+                'Updating existing PR to indicate that rebasing is not possible'
+              );
+              await platform.updatePr(branchPr.number, branchPr.title, newBody);
             }
             return 'pr-edited';
           }