diff --git a/lib/workers/branch/automerge.js b/lib/workers/branch/automerge.js
index 2e878306d4103816a085d696f12114cdfa04c488..0bd8952ca46b5e8a3c30b6d3a0de9132fdbcab97 100644
--- a/lib/workers/branch/automerge.js
+++ b/lib/workers/branch/automerge.js
@@ -8,13 +8,23 @@ async function tryBranchAutomerge(config) {
     return 'no automerge';
   }
   const existingPr = await platform.getBranchPr(config.branchName);
-  if (existingPr) {
-    return 'automerge aborted - PR exists';
-  }
+
   const branchStatus = await platform.getBranchStatus(
     config.branchName,
     config.requiredStatusChecks
   );
+
+  if (existingPr) {
+    if (branchStatus === 'success') {
+      if (existingPr.canRebase) {
+        await platform.mergeBranch(config.branchName, config.automergeType);
+        logger.info({ branch: config.branchName }, 'Branch automerged');
+        return 'automerged'; // Branch no longer exists
+      }
+      return 'automerge aborted - Human commits detected';
+    }
+    return 'automerge aborted - PR exists';
+  }
   if (branchStatus === 'success') {
     logger.debug(`Automerging branch`);
     try {
diff --git a/test/workers/branch/automerge.spec.js b/test/workers/branch/automerge.spec.js
index 3fbdd5cd55c0f59efe0e1a3feb4e5153a55aa20a..36394db7979f126016a1f249c1ddeb4203327927 100644
--- a/test/workers/branch/automerge.spec.js
+++ b/test/workers/branch/automerge.spec.js
@@ -34,11 +34,19 @@ describe('workers/branch/automerge', () => {
       platform.getBranchPr.mockReturnValueOnce({});
       config.automerge = true;
       config.automergeType = 'branch';
-      platform.getBranchStatus.mockReturnValueOnce('success');
       expect(await tryBranchAutomerge(config)).toBe(
         'automerge aborted - PR exists'
       );
     });
+    it('returns false if PR exists and success branch', async () => {
+      platform.getBranchPr.mockReturnValueOnce({});
+      config.automerge = true;
+      config.automergeType = 'branch';
+      platform.getBranchStatus.mockReturnValueOnce('success');
+      expect(await tryBranchAutomerge(config)).toBe(
+        'automerge aborted - Human commits detected'
+      );
+    });
     it('returns false if automerge fails', async () => {
       config.automerge = true;
       config.automergeType = 'branch';
@@ -54,5 +62,12 @@ describe('workers/branch/automerge', () => {
       platform.getBranchStatus.mockReturnValueOnce('success');
       expect(await tryBranchAutomerge(config)).toBe('automerged');
     });
+    it('merge branch if PR exists and have one commit and success branch', async () => {
+      platform.getBranchPr.mockReturnValueOnce({ canRebase: true });
+      config.automerge = true;
+      config.automergeType = 'branch';
+      platform.getBranchStatus.mockReturnValueOnce('success');
+      expect(await tryBranchAutomerge(config)).toBe('automerged');
+    });
   });
 });