diff --git a/lib/platform/azure/index.ts b/lib/platform/azure/index.ts
index ef3709235c3ed29f15179a03938c5b78c97b3327..876795fdcca17d15e81712bc8f395872c1d05a71 100644
--- a/lib/platform/azure/index.ts
+++ b/lib/platform/azure/index.ts
@@ -371,7 +371,7 @@ export /* istanbul ignore next */ function commitFilesToBranch({
   files,
   message,
   parentBranch = config.baseBranch,
-}: CommitFilesConfig): Promise<void> {
+}: CommitFilesConfig): Promise<string | null> {
   return config.storage.commitFilesToBranch({
     branchName,
     files,
diff --git a/lib/platform/bitbucket-server/index.ts b/lib/platform/bitbucket-server/index.ts
index 515cd44941ae8e57f64c2fb8f1584ca579ea1287..0aed905d58dc32a4aca563b4c769df03b76e84a8 100644
--- a/lib/platform/bitbucket-server/index.ts
+++ b/lib/platform/bitbucket-server/index.ts
@@ -438,7 +438,7 @@ export async function commitFilesToBranch({
   files,
   message,
   parentBranch = config.baseBranch,
-}: CommitFilesConfig): Promise<void> {
+}: CommitFilesConfig): Promise<string | null> {
   logger.debug(
     `commitFilesToBranch(${JSON.stringify(
       {
@@ -451,7 +451,7 @@ export async function commitFilesToBranch({
       2
     )})`
   );
-  await config.storage.commitFilesToBranch({
+  const commit = config.storage.commitFilesToBranch({
     branchName,
     files,
     message,
@@ -462,6 +462,7 @@ export async function commitFilesToBranch({
   await delay(1000);
   // refresh cache
   await getBranchPr(branchName, true);
+  return commit;
 }
 
 export function getFile(filePath: string, branchName: string): Promise<string> {
diff --git a/lib/platform/bitbucket/index.ts b/lib/platform/bitbucket/index.ts
index 03b7eb180193a219ca37591d37e623aea0dd0bff..709ac1d394c7c4c2236f8cfb8bc2af2733d89956 100644
--- a/lib/platform/bitbucket/index.ts
+++ b/lib/platform/bitbucket/index.ts
@@ -285,7 +285,7 @@ export function commitFilesToBranch({
   files,
   message,
   parentBranch = config.baseBranch,
-}: CommitFilesConfig): Promise<void> {
+}: CommitFilesConfig): Promise<string | null> {
   return config.storage.commitFilesToBranch({
     branchName,
     files,
diff --git a/lib/platform/common.ts b/lib/platform/common.ts
index c15596d35e9b207143a5d296ba9cdd46bc7bebc3..44c3e554f1fbaeb8ca758b0df438866955cdf891 100644
--- a/lib/platform/common.ts
+++ b/lib/platform/common.ts
@@ -179,7 +179,7 @@ export interface Platform {
   ensureComment(ensureComment: EnsureCommentConfig): Promise<boolean>;
   branchExists(branchName: string): Promise<boolean>;
   setBaseBranch(baseBranch?: string): Promise<void>;
-  commitFilesToBranch(commitFile: CommitFilesConfig): Promise<void>;
+  commitFilesToBranch(commitFile: CommitFilesConfig): Promise<string | null>;
   getPr(number: number): Promise<Pr>;
   findPr(findPRConfig: FindPRConfig): Promise<Pr>;
   mergeBranch(branchName: string): Promise<void>;
diff --git a/lib/platform/git/storage.ts b/lib/platform/git/storage.ts
index a1e3ad1d49de069387e7adfd338e37573a79ac3a..52070dc512a06b834a4e8929ea5f32f12e74146f 100644
--- a/lib/platform/git/storage.ts
+++ b/lib/platform/git/storage.ts
@@ -487,7 +487,7 @@ export class Storage {
     files,
     message,
     parentBranch = this._config.baseBranch,
-  }: CommitFilesConfig): Promise<void> {
+  }: CommitFilesConfig): Promise<string | null> {
     logger.debug(`Committing files to branch ${branchName}`);
     try {
       await this._git.reset('hard');
@@ -529,13 +529,14 @@ export class Storage {
           }
         }
       }
-      await this._git.commit(message);
+      const commitRes = await this._git.commit(message);
+      const commit = commitRes?.commit || 'unknown';
       if (!(await this.hasDiff(`origin/${branchName}`))) {
         logger.info(
           { branchName, fileNames },
           'No file changes detected. Skipping commit'
         );
-        return;
+        return null;
       }
       await this._git.push('origin', `${branchName}:${branchName}`, {
         '--force': true,
@@ -546,6 +547,7 @@ export class Storage {
       await this._git.fetch(['origin', ref, '--depth=2', '--force']);
       this._config.branchExists[branchName] = true;
       limits.incrementLimit('prCommitsPerRunLimit');
+      return commit;
     } catch (err) /* istanbul ignore next */ {
       checkForPlatformFailure(err);
       logger.debug({ err }, 'Error commiting files');
diff --git a/lib/platform/gitea/index.ts b/lib/platform/gitea/index.ts
index 51860b34ff875e210dcab55b2a139d299fa4baf6..25f9e7e9b0175f6ece9bd1230c5e202b2df3db65 100644
--- a/lib/platform/gitea/index.ts
+++ b/lib/platform/gitea/index.ts
@@ -843,7 +843,7 @@ const platform: Platform = {
     files,
     message,
     parentBranch = config.baseBranch,
-  }: CommitFilesConfig): Promise<void> {
+  }: CommitFilesConfig): Promise<string | null> {
     return config.storage.commitFilesToBranch({
       branchName,
       files,
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index d641e8a96a39f302ede705a3c060181961e2ceca..0a45fa463babe3ef0c7152525374ba7247f74370 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -596,7 +596,7 @@ export function commitFilesToBranch({
   files,
   message,
   parentBranch = config.baseBranch,
-}: CommitFilesConfig): Promise<void> {
+}: CommitFilesConfig): Promise<string | null> {
   return config.storage.commitFilesToBranch({
     branchName,
     files,
diff --git a/lib/platform/gitlab/index.ts b/lib/platform/gitlab/index.ts
index c379638c5eafba3ad1f84c4d36fced23e81a15c8..a6f8763e46c1d0d19ca54fec816889acac77f949 100644
--- a/lib/platform/gitlab/index.ts
+++ b/lib/platform/gitlab/index.ts
@@ -568,7 +568,7 @@ export function commitFilesToBranch({
   files,
   message,
   parentBranch = config.baseBranch,
-}: CommitFilesConfig): Promise<void> {
+}: CommitFilesConfig): Promise<string | null> {
   return config.storage.commitFilesToBranch({
     branchName,
     files,
diff --git a/lib/workers/branch/commit.ts b/lib/workers/branch/commit.ts
index 5fe2bffb324be8fe36f746716b6fb377ac8bd30a..df1a42e223c869161e6e982fe2474beb2dde36db 100644
--- a/lib/workers/branch/commit.ts
+++ b/lib/workers/branch/commit.ts
@@ -15,7 +15,7 @@ export type CommitConfig = RenovateConfig & {
 
 export async function commitFilesToBranch(
   config: CommitConfig
-): Promise<boolean> {
+): Promise<string | null> {
   let updatedFiles = config.updatedPackageFiles.concat(config.updatedArtifacts);
   // istanbul ignore if
   if (is.nonEmptyArray(config.excludeCommitPaths)) {
@@ -31,25 +31,21 @@ export async function commitFilesToBranch(
       return true;
     });
   }
-  if (is.nonEmptyArray(updatedFiles)) {
-    logger.debug(`${updatedFiles.length} file(s) to commit`);
-
-    // istanbul ignore if
-    if (config.dryRun) {
-      logger.info('DRY-RUN: Would commit files to branch ' + config.branchName);
-    } else {
-      // API will know whether to create new branch or not
-      await platform.commitFilesToBranch({
-        branchName: config.branchName,
-        files: updatedFiles,
-        message: config.commitMessage,
-        parentBranch: config.baseBranch || undefined,
-      });
-      logger.info({ branch: config.branchName }, `files committed`);
-    }
-  } else {
+  if (!is.nonEmptyArray(updatedFiles)) {
     logger.debug(`No files to commit`);
-    return false;
+    return null;
+  }
+  logger.debug(`${updatedFiles.length} file(s) to commit`);
+  // istanbul ignore if
+  if (config.dryRun) {
+    logger.info('DRY-RUN: Would commit files to branch ' + config.branchName);
+    return null;
   }
-  return true;
+  // API will know whether to create new branch or not
+  return platform.commitFilesToBranch({
+    branchName: config.branchName,
+    files: updatedFiles,
+    message: config.commitMessage,
+    parentBranch: config.baseBranch || undefined,
+  });
 }
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index 86c6b2af0760657e65b16a50b07ed4b0673b22b6..69226129473b833cc74432f4fa252aa3935b8786 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -421,10 +421,10 @@ export async function processBranch(
       }
     }
 
-    config.committedFiles = await commitFilesToBranch(config);
+    const commit = await commitFilesToBranch(config);
+    // TODO: Remove lockFileMaintenance rule?
     if (
       config.updateType === 'lockFileMaintenance' &&
-      !config.committedFiles &&
       !config.parentBranch &&
       branchExists
     ) {
@@ -438,10 +438,13 @@ export async function processBranch(
       }
       return 'done';
     }
-    if (!(config.committedFiles || branchExists)) {
+    if (!commit && !branchExists) {
       return 'no-work';
     }
-
+    if (commit) {
+      const action = branchExists ? 'updated' : 'created';
+      logger.info({ commit }, `Branch ${action}`);
+    }
     // Set branch statuses
     await setStability(config);
     await setUnpublishable(config);
diff --git a/lib/workers/repository/onboarding/branch/create.ts b/lib/workers/repository/onboarding/branch/create.ts
index 73490bf13855e40102e1643b0476e7fb70378a36..c5d2616506fabc45a04ff2b3b0694adbc610cd8b 100644
--- a/lib/workers/repository/onboarding/branch/create.ts
+++ b/lib/workers/repository/onboarding/branch/create.ts
@@ -8,7 +8,7 @@ const defaultConfigFile = configFileNames[0];
 
 export async function createOnboardingBranch(
   config: Partial<RenovateConfig>
-): Promise<void> {
+): Promise<string | null> {
   logger.debug('createOnboardingBranch()');
   const contents = await getOnboardingConfig(config);
   logger.info('Creating onboarding branch');
@@ -27,16 +27,16 @@ export async function createOnboardingBranch(
   // istanbul ignore if
   if (config.dryRun) {
     logger.info('DRY-RUN: Would commit files to onboarding branch');
-  } else {
-    await platform.commitFilesToBranch({
-      branchName: config.onboardingBranch,
-      files: [
-        {
-          name: defaultConfigFile,
-          contents,
-        },
-      ],
-      message: commitMessage,
-    });
+    return null;
   }
+  return platform.commitFilesToBranch({
+    branchName: config.onboardingBranch,
+    files: [
+      {
+        name: defaultConfigFile,
+        contents,
+      },
+    ],
+    message: commitMessage,
+  });
 }
diff --git a/lib/workers/repository/onboarding/branch/index.ts b/lib/workers/repository/onboarding/branch/index.ts
index bc49cde7f2c3d93ca1afc95c243b6b1cd5bc6974..b7307b06b06b9a0e9b4963d56c5abde4fe7a6fcd 100644
--- a/lib/workers/repository/onboarding/branch/index.ts
+++ b/lib/workers/repository/onboarding/branch/index.ts
@@ -26,14 +26,26 @@ export async function checkOnboardingBranch(
   logger.info('Repo is not onboarded');
   if (await onboardingPrExists(config)) {
     logger.debug('Onboarding PR already exists');
-    await rebaseOnboardingBranch(config);
+    const commit = await rebaseOnboardingBranch(config);
+    if (commit) {
+      logger.info(
+        { branch: config.onboardingBranch, commit, onboarding: true },
+        'Branch updated'
+      );
+    }
   } else {
     logger.debug('Onboarding PR does not exist');
     if (Object.entries(await extractAllDependencies(config)).length === 0) {
       throw new Error(MANAGER_NO_PACKAGE_FILES);
     }
     logger.info('Need to create onboarding PR');
-    await createOnboardingBranch(config);
+    const commit = await createOnboardingBranch(config);
+    if (commit) {
+      logger.info(
+        { branch: config.onboardingBranch, commit, onboarding: true },
+        'Branch created'
+      );
+    }
   }
   if (!config.dryRun) {
     await platform.setBaseBranch(config.onboardingBranch);
diff --git a/lib/workers/repository/onboarding/branch/rebase.ts b/lib/workers/repository/onboarding/branch/rebase.ts
index d981156a226e95c2d9d54d58a803aabe1ec4a524..9ba102a906d987d18cfea31bf4dba696316b5605 100644
--- a/lib/workers/repository/onboarding/branch/rebase.ts
+++ b/lib/workers/repository/onboarding/branch/rebase.ts
@@ -24,12 +24,12 @@ function getCommitMessage(config: RenovateConfig): string {
 
 export async function rebaseOnboardingBranch(
   config: RenovateConfig
-): Promise<void> {
+): Promise<string | null> {
   logger.debug('Checking if onboarding branch needs rebasing');
   const pr = await platform.getBranchPr(config.onboardingBranch);
   if (pr.isModified) {
     logger.info('Onboarding branch has been edited and cannot be rebased');
-    return;
+    return null;
   }
   const existingContents = await platform.getFile(
     defaultConfigFile,
@@ -38,7 +38,7 @@ export async function rebaseOnboardingBranch(
   const contents = await getOnboardingConfig(config);
   if (contents === existingContents && !pr.isStale) {
     logger.info('Onboarding branch is up to date');
-    return;
+    return null;
   }
   logger.info('Rebasing onboarding branch');
   // istanbul ignore next
@@ -47,16 +47,16 @@ export async function rebaseOnboardingBranch(
   // istanbul ignore if
   if (config.dryRun) {
     logger.info('DRY-RUN: Would rebase files in onboarding branch');
-  } else {
-    await platform.commitFilesToBranch({
-      branchName: config.onboardingBranch,
-      files: [
-        {
-          name: defaultConfigFile,
-          contents,
-        },
-      ],
-      message: commitMessage,
-    });
+    return null;
   }
+  return platform.commitFilesToBranch({
+    branchName: config.onboardingBranch,
+    files: [
+      {
+        name: defaultConfigFile,
+        contents,
+      },
+    ],
+    message: commitMessage,
+  });
 }
diff --git a/test/workers/branch/commit.spec.ts b/test/workers/branch/commit.spec.ts
index b1d5bb8d7de880ed2dad7c2f0e1a832371f6807d..f39c47a7a00e6b43eb86671ada594b5fb5658e94 100644
--- a/test/workers/branch/commit.spec.ts
+++ b/test/workers/branch/commit.spec.ts
@@ -20,7 +20,7 @@ describe('workers/branch/automerge', () => {
         updatedArtifacts: [],
       };
       jest.resetAllMocks();
-      platform.commitFilesToBranch.mockResolvedValueOnce();
+      platform.commitFilesToBranch.mockResolvedValueOnce('abc123');
     });
     it('handles empty files', async () => {
       await commitFilesToBranch(config);
diff --git a/test/workers/branch/index.spec.ts b/test/workers/branch/index.spec.ts
index 5e670ed6d81c667030d20d8817c9657d1fb69ef0..adfb1386cc7cb39fd985b2b1c2bdd9c18e609d40 100644
--- a/test/workers/branch/index.spec.ts
+++ b/test/workers/branch/index.spec.ts
@@ -62,7 +62,7 @@ describe('workers/branch', () => {
         upgrades: [{ depName: 'some-dep-name' } as never],
       } as never;
       schedule.isScheduledNow.mockReturnValue(true);
-      commit.commitFilesToBranch.mockResolvedValue(true);
+      commit.commitFilesToBranch.mockResolvedValue('abc123');
     });
     afterEach(() => {
       platform.ensureComment.mockClear();
@@ -221,7 +221,7 @@ describe('workers/branch', () => {
         updatedArtifacts: [],
       });
       platform.branchExists.mockResolvedValueOnce(false);
-      commit.commitFilesToBranch.mockResolvedValueOnce(false);
+      commit.commitFilesToBranch.mockResolvedValueOnce(null);
       expect(await branchWorker.processBranch(config)).toEqual('no-work');
     });
     it('returns if branch automerged', async () => {
@@ -462,7 +462,7 @@ describe('workers/branch', () => {
       } as never);
 
       schedule.isScheduledNow.mockReturnValueOnce(false);
-      commit.commitFilesToBranch.mockResolvedValueOnce(false);
+      commit.commitFilesToBranch.mockResolvedValueOnce(null);
 
       expect(
         await branchWorker.processBranch({
@@ -521,7 +521,7 @@ describe('workers/branch', () => {
       } as never);
 
       schedule.isScheduledNow.mockReturnValueOnce(false);
-      commit.commitFilesToBranch.mockResolvedValueOnce(false);
+      commit.commitFilesToBranch.mockResolvedValueOnce(null);
       expect(
         await branchWorker.processBranch({
           ...config,
@@ -558,7 +558,7 @@ describe('workers/branch', () => {
       fs.readFile.mockResolvedValueOnce(Buffer.from('modified file content'));
 
       schedule.isScheduledNow.mockReturnValueOnce(false);
-      commit.commitFilesToBranch.mockResolvedValueOnce(false);
+      commit.commitFilesToBranch.mockResolvedValueOnce(null);
 
       const result = await branchWorker.processBranch({
         ...config,
diff --git a/test/workers/repository/onboarding/branch/index.spec.ts b/test/workers/repository/onboarding/branch/index.spec.ts
index 9e7e5eae4386c13166964010f6a51438e11de9e1..72ca8c9abea439b53fdc7f6e2d6ede8ac2ad22e4 100644
--- a/test/workers/repository/onboarding/branch/index.spec.ts
+++ b/test/workers/repository/onboarding/branch/index.spec.ts
@@ -2,6 +2,9 @@ import { mock } from 'jest-mock-extended';
 import { RenovateConfig, platform, getConfig } from '../../../../util';
 import { checkOnboardingBranch } from '../../../../../lib/workers/repository/onboarding/branch';
 import { Pr } from '../../../../../lib/platform';
+import * as _rebase from '../../../../../lib/workers/repository/onboarding/branch/rebase';
+
+const rebase: any = _rebase;
 
 jest.mock('../../../../../lib/workers/repository/onboarding/branch/rebase');
 
@@ -86,6 +89,7 @@ describe('workers/repository/onboarding/branch', () => {
         },
       });
       platform.getFile.mockResolvedValue(pJsonContent);
+      platform.commitFilesToBranch.mockResolvedValueOnce('abc123');
       await checkOnboardingBranch(config);
       expect(
         platform.commitFilesToBranch.mock.calls[0][0].files[0].contents
@@ -95,6 +99,7 @@ describe('workers/repository/onboarding/branch', () => {
       platform.getFileList.mockResolvedValue(['package.json']);
       platform.findPr.mockResolvedValue(null);
       platform.getBranchPr.mockResolvedValueOnce(mock<Pr>());
+      rebase.rebaseOnboardingBranch.mockResolvedValueOnce('abc123');
       const res = await checkOnboardingBranch(config);
       expect(res.repoIsOnboarded).toBe(false);
       expect(res.branchList).toEqual(['renovate/configure']);