diff --git a/lib/datasource/git-refs/index.spec.ts b/lib/datasource/git-refs/index.spec.ts
index be43285cccbb85c8700c3b52358cf7f3794b4dd4..07a607026678bb5fcaedfb22ed74b620a47d1510 100644
--- a/lib/datasource/git-refs/index.spec.ts
+++ b/lib/datasource/git-refs/index.spec.ts
@@ -1,9 +1,9 @@
 import fs from 'fs-extra';
-import _simpleGit from 'simple-git/promise';
+import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
 import { id as datasource, getDigest } from '.';
 
-jest.mock('simple-git/promise');
+jest.mock('simple-git');
 const simpleGit: any = _simpleGit;
 
 const depName = 'https://github.com/example/example.git';
diff --git a/lib/datasource/git-refs/index.ts b/lib/datasource/git-refs/index.ts
index c872bc33f23336b5a4a19105cd30eac4f7ed17a5..fcb3deaf5d37be82c6d00907f54e2b167c7dbab9 100644
--- a/lib/datasource/git-refs/index.ts
+++ b/lib/datasource/git-refs/index.ts
@@ -1,4 +1,4 @@
-import simpleGit from 'simple-git/promise';
+import simpleGit from 'simple-git';
 import * as packageCache from '../../util/cache/package';
 import * as semver from '../../versioning/semver';
 import { DigestConfig, GetReleasesConfig, ReleaseResult } from '../common';
diff --git a/lib/datasource/git-submodules/index.spec.ts b/lib/datasource/git-submodules/index.spec.ts
index 5d59836228dfac9ef9b699d62d190196e6cd2579..da5b3b2c4d5a5431aaa1f7215374e2141dec3858 100644
--- a/lib/datasource/git-submodules/index.spec.ts
+++ b/lib/datasource/git-submodules/index.spec.ts
@@ -1,9 +1,9 @@
-import _simpleGit from 'simple-git/promise';
+import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
 import { id as versioning } from '../../versioning/git';
 import { id as datasource, getDigest } from '.';
 
-jest.mock('simple-git/promise');
+jest.mock('simple-git');
 const simpleGit: any = _simpleGit;
 
 const depName = 'https://github.com/example/example.git';
diff --git a/lib/datasource/git-submodules/index.ts b/lib/datasource/git-submodules/index.ts
index c085aa3dba5a4a21e75bcb94aac1e6684a9fc535..530796a489d34292b39c6fd0d409a703ba7cc1f0 100644
--- a/lib/datasource/git-submodules/index.ts
+++ b/lib/datasource/git-submodules/index.ts
@@ -1,5 +1,5 @@
 import { URL } from 'url';
-import Git from 'simple-git/promise';
+import Git from 'simple-git';
 
 import * as packageCache from '../../util/cache/package';
 import { DigestConfig, GetReleasesConfig, ReleaseResult } from '../common';
diff --git a/lib/datasource/git-tags/index.spec.ts b/lib/datasource/git-tags/index.spec.ts
index 7cb76782b65dd2df9986255c7aa604307c013e62..183371c737b01e101ae6c820e0090a075dea90cd 100644
--- a/lib/datasource/git-tags/index.spec.ts
+++ b/lib/datasource/git-tags/index.spec.ts
@@ -1,9 +1,9 @@
 import fs from 'fs-extra';
-import _simpleGit from 'simple-git/promise';
+import _simpleGit from 'simple-git';
 import { getPkgReleases } from '..';
 import { id as datasource, getDigest } from '.';
 
-jest.mock('simple-git/promise');
+jest.mock('simple-git');
 const simpleGit: any = _simpleGit;
 
 const depName = 'https://github.com/example/example.git';
diff --git a/lib/manager/bundler/artifacts.spec.ts b/lib/manager/bundler/artifacts.spec.ts
index e0cb5a3f1f65bee592e28559a4ff3579bebba7a0..6e6d9f3d8acb0c2d681f2fbb1cd11f18dfb07039 100644
--- a/lib/manager/bundler/artifacts.spec.ts
+++ b/lib/manager/bundler/artifacts.spec.ts
@@ -1,5 +1,4 @@
 import { exec as _exec } from 'child_process';
-import Git from 'simple-git/promise';
 import { join } from 'upath';
 import { envMock, mockExecAll } from '../../../test/execUtil';
 import { fs, git, mocked } from '../../../test/util';
@@ -8,6 +7,7 @@ import { setUtilConfig } from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import * as docker from '../../util/exec/docker';
 import * as _env from '../../util/exec/env';
+import { StatusResult } from '../../util/git';
 import * as _bundlerHostRules from './host-rules';
 import { updateArtifacts } from '.';
 
@@ -63,7 +63,7 @@ describe('bundler.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: [],
-    } as Git.StatusResult);
+    } as StatusResult);
     fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
       await updateArtifacts({
@@ -82,7 +82,7 @@ describe('bundler.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Gemfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
     fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
       await updateArtifacts({
@@ -101,7 +101,7 @@ describe('bundler.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Gemfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
     fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
       await updateArtifacts({
@@ -135,7 +135,7 @@ describe('bundler.updateArtifacts()', () => {
       const execSnapshots = mockExecAll(exec);
       git.getRepoStatus.mockResolvedValueOnce({
         modified: ['Gemfile.lock'],
-      } as Git.StatusResult);
+      } as StatusResult);
       fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
       expect(
         await updateArtifacts({
@@ -163,7 +163,7 @@ describe('bundler.updateArtifacts()', () => {
       const execSnapshots = mockExecAll(exec);
       git.getRepoStatus.mockResolvedValueOnce({
         modified: ['Gemfile.lock'],
-      } as Git.StatusResult);
+      } as StatusResult);
       fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
       expect(
         await updateArtifacts({
@@ -196,7 +196,7 @@ describe('bundler.updateArtifacts()', () => {
       const execSnapshots = mockExecAll(exec);
       git.getRepoStatus.mockResolvedValueOnce({
         modified: ['Gemfile.lock'],
-      } as Git.StatusResult);
+      } as StatusResult);
       fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
       expect(
         await updateArtifacts({
@@ -243,7 +243,7 @@ describe('bundler.updateArtifacts()', () => {
       const execSnapshots = mockExecAll(exec);
       git.getRepoStatus.mockResolvedValueOnce({
         modified: ['Gemfile.lock'],
-      } as Git.StatusResult);
+      } as StatusResult);
       fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
       expect(
         await updateArtifacts({
@@ -268,7 +268,7 @@ describe('bundler.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec, execError);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Gemfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
     expect(
       await updateArtifacts({
         packageFileName: 'Gemfile',
@@ -288,7 +288,7 @@ describe('bundler.updateArtifacts()', () => {
     const execSnapshots = mockExecAll(exec);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Gemfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
     fs.readLocalFile.mockResolvedValueOnce('Updated Gemfile.lock' as any);
     expect(
       await updateArtifacts({
diff --git a/lib/manager/cocoapods/artifacts.spec.ts b/lib/manager/cocoapods/artifacts.spec.ts
index d6284b75ed0f651b338def953f92d5ee39f7afb8..910508824dcc66bf924f3d5f8510aa5cf9eedd5e 100644
--- a/lib/manager/cocoapods/artifacts.spec.ts
+++ b/lib/manager/cocoapods/artifacts.spec.ts
@@ -1,6 +1,5 @@
 import { exec as _exec } from 'child_process';
 import _fs from 'fs-extra';
-import Git from 'simple-git/promise';
 import { join } from 'upath';
 import { envMock, mockExecAll } from '../../../test/execUtil';
 import { git, mocked } from '../../../test/util';
@@ -8,6 +7,7 @@ import * as _datasource from '../../datasource';
 import { setExecConfig } from '../../util/exec';
 import { BinarySource } from '../../util/exec/common';
 import * as _env from '../../util/exec/env';
+import { StatusResult } from '../../util/git';
 import { updateArtifacts } from '.';
 
 jest.mock('fs-extra');
@@ -102,7 +102,7 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockResolvedValueOnce('Current Podfile' as any);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: [],
-    } as Git.StatusResult);
+    } as StatusResult);
     fs.readFile.mockResolvedValueOnce('Current Podfile' as any);
     expect(
       await updateArtifacts({
@@ -120,7 +120,7 @@ describe('.updateArtifacts()', () => {
     fs.readFile.mockResolvedValueOnce('Old Podfile' as any);
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Podfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
     fs.readFile.mockResolvedValueOnce('New Podfile' as any);
     expect(
       await updateArtifacts({
@@ -142,7 +142,7 @@ describe('.updateArtifacts()', () => {
       not_added: ['Pods/New'],
       modified: ['Podfile.lock', 'Pods/Manifest.lock'],
       deleted: ['Pods/Deleted'],
-    } as Git.StatusResult);
+    } as StatusResult);
     expect(
       await updateArtifacts({
         packageFileName: 'Podfile',
@@ -199,7 +199,7 @@ describe('.updateArtifacts()', () => {
 
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Podfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
 
     await updateArtifacts({
       packageFileName: 'Podfile',
@@ -227,7 +227,7 @@ describe('.updateArtifacts()', () => {
 
     git.getRepoStatus.mockResolvedValueOnce({
       modified: ['Podfile.lock'],
-    } as Git.StatusResult);
+    } as StatusResult);
 
     await updateArtifacts({
       packageFileName: 'Podfile',
diff --git a/lib/manager/git-submodules/extract.spec.ts b/lib/manager/git-submodules/extract.spec.ts
index 0463b71e525b6c0fe84177bc993f04e712f898ba..ce618103e3e5030e0cdcd91193bdb24753d597fd 100644
--- a/lib/manager/git-submodules/extract.spec.ts
+++ b/lib/manager/git-submodules/extract.spec.ts
@@ -1,10 +1,10 @@
-import _simpleGit from 'simple-git/promise';
+import _simpleGit, { SimpleGit } from 'simple-git';
 import { PackageFile } from '../common';
 import extractPackageFile from './extract';
 
-jest.mock('simple-git/promise');
-const simpleGit: jest.Mock<Partial<_simpleGit.SimpleGit>> = _simpleGit as never;
-const Git: typeof _simpleGit = jest.requireActual('simple-git/promise');
+jest.mock('simple-git');
+const simpleGit: jest.Mock<Partial<SimpleGit>> = _simpleGit as never;
+const Git: typeof _simpleGit = jest.requireActual('simple-git');
 
 const localDir = `${__dirname}/__fixtures__`;
 
diff --git a/lib/manager/git-submodules/extract.ts b/lib/manager/git-submodules/extract.ts
index dabe8a892685eccabcee2eb1d4d90c5d400c5d4f..1bf4b93495719dfb6fad1ba3ddee0938ed684fa2 100644
--- a/lib/manager/git-submodules/extract.ts
+++ b/lib/manager/git-submodules/extract.ts
@@ -1,5 +1,5 @@
 import URL from 'url';
-import Git from 'simple-git/promise';
+import Git, { SimpleGit } from 'simple-git';
 import upath from 'upath';
 
 import * as datasourceGitSubmodules from '../../datasource/git-submodules';
@@ -12,7 +12,7 @@ type GitModule = {
 };
 
 async function getUrl(
-  git: Git.SimpleGit,
+  git: SimpleGit,
   gitModulesPath: string,
   submoduleName: string
 ): Promise<string> {
@@ -50,7 +50,7 @@ async function getBranch(
 }
 
 async function getModules(
-  git: Git.SimpleGit,
+  git: SimpleGit,
   gitModulesPath: string
 ): Promise<GitModule[]> {
   const res: GitModule[] = [];
diff --git a/lib/manager/git-submodules/update.spec.ts b/lib/manager/git-submodules/update.spec.ts
index a6e69a4315bfcbdb8be68b7003d5ee9025321893..ad45dab18a7ee2ebbb7470b344bdaeb88f5a3c14 100644
--- a/lib/manager/git-submodules/update.spec.ts
+++ b/lib/manager/git-submodules/update.spec.ts
@@ -1,9 +1,9 @@
-import _simpleGit from 'simple-git/promise';
+import _simpleGit from 'simple-git';
 import { dir } from 'tmp-promise';
 
 import updateDependency from './update';
 
-jest.mock('simple-git/promise');
+jest.mock('simple-git');
 const simpleGit: any = _simpleGit;
 
 describe('manager/git-submodules/update', () => {
diff --git a/lib/manager/git-submodules/update.ts b/lib/manager/git-submodules/update.ts
index 6057c798265263ae1b89ca6c5a52b497e2bf0e8f..50ba37201283ee7f7ce2c7479bff445b9c13fcd2 100644
--- a/lib/manager/git-submodules/update.ts
+++ b/lib/manager/git-submodules/update.ts
@@ -1,4 +1,4 @@
-import Git from 'simple-git/promise';
+import Git from 'simple-git';
 
 import { UpdateDependencyConfig } from '../common';
 
diff --git a/lib/manager/gradle-wrapper/artifacts-real.spec.ts b/lib/manager/gradle-wrapper/artifacts-real.spec.ts
index 43924275d5618e3f5e57f99d2b39966d20b13422..8ebb44551038e0dca17a85d8168395d08630e555 100644
--- a/lib/manager/gradle-wrapper/artifacts-real.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts-real.spec.ts
@@ -1,9 +1,10 @@
 import { resolve } from 'path';
 import { readFile, readFileSync } from 'fs-extra';
-import Git from 'simple-git/promise';
+import Git from 'simple-git';
 import * as httpMock from '../../../test/httpMock';
 import { getName, git, partial } from '../../../test/util';
 import { setUtilConfig } from '../../util';
+import { StatusResult } from '../../util/git';
 import { ifSystemSupportsGradle } from '../gradle/__testutil__/gradle';
 import * as dcUpdate from '.';
 
@@ -52,7 +53,7 @@ describe(getName(__filename), () => {
           'gradlew',
           'gradlew.bat',
         ],
-      } as Git.StatusResult);
+      } as StatusResult);
 
       const res = await dcUpdate.updateArtifacts({
         packageFileName: 'gradle/wrapper/gradle-wrapper.properties',
@@ -91,7 +92,7 @@ describe(getName(__filename), () => {
 
     it('updates from version', async () => {
       git.getRepoStatus.mockResolvedValueOnce(
-        partial<Git.StatusResult>({
+        partial<StatusResult>({
           modified: ['gradle/wrapper/gradle-wrapper.properties'],
         })
       );
@@ -112,7 +113,7 @@ describe(getName(__filename), () => {
     it('up to date', async () => {
       git.getRepoStatus.mockResolvedValue({
         modified: [],
-      } as Git.StatusResult);
+      } as StatusResult);
 
       const res = await dcUpdate.updateArtifacts({
         packageFileName: 'gradle/wrapper/gradle-wrapper.properties',
@@ -206,7 +207,7 @@ describe(getName(__filename), () => {
         );
 
       git.getRepoStatus.mockResolvedValueOnce(
-        partial<Git.StatusResult>({
+        partial<StatusResult>({
           modified: ['gradle/wrapper/gradle-wrapper.properties'],
         })
       );
diff --git a/lib/manager/gradle-wrapper/artifacts.spec.ts b/lib/manager/gradle-wrapper/artifacts.spec.ts
index ef72548d9697911fa2b21a1e67a7de33f4763068..2399f6e5780cab5e8db2ae4b87ca5c2957db6f7b 100644
--- a/lib/manager/gradle-wrapper/artifacts.spec.ts
+++ b/lib/manager/gradle-wrapper/artifacts.spec.ts
@@ -2,7 +2,6 @@
 import { exec as _exec } from 'child_process';
 import { resolve } from 'path';
 import { readFile } from 'fs-extra';
-import Git from 'simple-git/promise';
 import { envMock, mockExecAll } from '../../../test/execUtil';
 import * as httpMock from '../../../test/httpMock';
 import {
@@ -16,6 +15,7 @@ import {
 import { setUtilConfig } from '../../util';
 import { BinarySource } from '../../util/exec/common';
 import { resetPrefetchedImages } from '../../util/exec/docker';
+import { StatusResult } from '../../util/git';
 import * as dcUpdate from '.';
 
 jest.mock('child_process');
@@ -66,7 +66,7 @@ describe(getName(__filename), () => {
         'gradlew',
         'gradlew.bat',
       ],
-    } as Git.StatusResult);
+    } as StatusResult);
 
     const execSnapshots = mockExecAll(exec);
 
@@ -112,7 +112,7 @@ describe(getName(__filename), () => {
   it('gradlew failed', async () => {
     const execSnapshots = mockExecAll(exec, new Error('failed'));
     git.getRepoStatus.mockResolvedValueOnce(
-      partial<Git.StatusResult>({
+      partial<StatusResult>({
         modified: [],
       })
     );
@@ -137,7 +137,7 @@ describe(getName(__filename), () => {
       );
 
     git.getRepoStatus.mockResolvedValueOnce(
-      partial<Git.StatusResult>({
+      partial<StatusResult>({
         modified: ['gradle/wrapper/gradle-wrapper.properties'],
       })
     );
diff --git a/lib/manager/gradle-wrapper/artifacts.ts b/lib/manager/gradle-wrapper/artifacts.ts
index 5cc34b0ee69defe95c55fefe5245b676b99b0353..389fa9a0bcd6cf1070d89ee661fe37fdfafaee7f 100644
--- a/lib/manager/gradle-wrapper/artifacts.ts
+++ b/lib/manager/gradle-wrapper/artifacts.ts
@@ -1,10 +1,9 @@
 import { resolve } from 'path';
 import { stat } from 'fs-extra';
-import Git from 'simple-git/promise';
 import { logger } from '../../logger';
 import { ExecOptions, exec } from '../../util/exec';
 import { readLocalFile, writeLocalFile } from '../../util/fs';
-import { getRepoStatus } from '../../util/git';
+import { StatusResult, getRepoStatus } from '../../util/git';
 import { Http } from '../../util/http';
 import { UpdateArtifact, UpdateArtifactsResult } from '../common';
 import {
@@ -16,7 +15,7 @@ import {
 const http = new Http('gradle-wrapper');
 
 async function addIfUpdated(
-  status: Git.StatusResult,
+  status: StatusResult,
   fileProjectPath: string
 ): Promise<UpdateArtifactsResult | null> {
   if (status.modified.includes(fileProjectPath)) {
diff --git a/lib/platform/azure/azure-helper.ts b/lib/platform/azure/azure-helper.ts
index 6289887586886d9e2f0facf73e930c2edb132a87..c10a7983c450da4fd27506fb83cfb1eb7327bc83 100644
--- a/lib/platform/azure/azure-helper.ts
+++ b/lib/platform/azure/azure-helper.ts
@@ -4,7 +4,7 @@ import {
   GitPullRequestMergeStrategy,
   GitRef,
 } from 'azure-devops-node-api/interfaces/GitInterfaces';
-import { Options } from 'simple-git/promise';
+import { Options } from 'simple-git';
 import {
   PR_STATE_CLOSED,
   PR_STATE_MERGED,
diff --git a/lib/util/git/index.spec.ts b/lib/util/git/index.spec.ts
index f7c4e17687605d8ecbf4b87f66ca09fa3aaac7c8..d23dd7fd618ca21a1975da7ea94004d22cb1bc4c 100644
--- a/lib/util/git/index.spec.ts
+++ b/lib/util/git/index.spec.ts
@@ -1,5 +1,5 @@
 import fs from 'fs-extra';
-import Git from 'simple-git/promise';
+import Git from 'simple-git';
 import tmp from 'tmp-promise';
 import * as git from '.';
 
@@ -20,8 +20,8 @@ describe('platform/git', () => {
     await repo.add(['past_file']);
     await repo.commit('past message');
 
-    await repo.checkoutBranch('renovate/past_branch', 'master');
-    await repo.checkoutBranch('develop', 'master');
+    await repo.checkout(['-b', 'renovate/past_branch', 'master']);
+    await repo.checkout(['-b', 'develop', 'master']);
 
     await repo.checkout('master');
     await fs.writeFile(base.path + '/master_file', 'master');
@@ -31,7 +31,7 @@ describe('platform/git', () => {
       '--date=' + masterCommitDate.toISOString(),
     ]);
 
-    await repo.checkoutBranch('renovate/future_branch', 'master');
+    await repo.checkout(['-b', 'renovate/future_branch', 'master']);
     await fs.writeFile(base.path + '/future_file', 'future');
     await repo.add(['future_file']);
     await repo.commit('future message');
@@ -328,7 +328,7 @@ describe('platform/git', () => {
   describe('initRepo())', () => {
     it('should fetch latest', async () => {
       const repo = Git(base.path).silent(true);
-      await repo.checkoutBranch('test', 'master');
+      await repo.checkout(['-b', 'test', 'master']);
       await fs.writeFile(base.path + '/test', 'lorem ipsum');
       await repo.add(['test']);
       await repo.commit('past message2');
@@ -356,7 +356,7 @@ describe('platform/git', () => {
 
     it('should set branch prefix', async () => {
       const repo = Git(base.path).silent(true);
-      await repo.checkoutBranch('renovate/test', 'master');
+      await repo.checkout(['-b', 'renovate/test', 'master']);
       await fs.writeFile(base.path + '/test', 'lorem ipsum');
       await repo.add(['test']);
       await repo.commit('past message2');
diff --git a/lib/util/git/index.ts b/lib/util/git/index.ts
index d80a0b5e4adfffac22b59a30a0f59ec0eaac333e..2bb3d71db1ca0c1f27752272ac398c1afba334ba 100644
--- a/lib/util/git/index.ts
+++ b/lib/util/git/index.ts
@@ -1,7 +1,13 @@
 import { join } from 'path';
 import URL from 'url';
 import fs from 'fs-extra';
-import Git from 'simple-git/promise';
+import Git, {
+  DiffResult as DiffResult_,
+  Options,
+  ResetMode,
+  SimpleGit,
+  StatusResult as StatusResult_,
+} from 'simple-git';
 import {
   CONFIG_VALIDATION,
   REPOSITORY_CHANGED,
@@ -20,15 +26,15 @@ declare module 'fs-extra' {
   export function exists(pathLike: string): Promise<boolean>;
 }
 
-export type StatusResult = Git.StatusResult;
+export type StatusResult = StatusResult_;
 
-export type DiffResult = Git.DiffResult;
+export type DiffResult = DiffResult_;
 
 interface StorageConfig {
   localDir: string;
   currentBranch?: string;
   url: string;
-  extraCloneOpts?: Git.Options;
+  extraCloneOpts?: Options;
   gitAuthorName?: string;
   gitAuthorEmail?: string;
 }
@@ -82,7 +88,7 @@ async function isDirectory(dir: string): Promise<boolean> {
   }
 }
 
-async function getDefaultBranch(git: Git.SimpleGit): Promise<string> {
+async function getDefaultBranch(git: SimpleGit): Promise<string> {
   // see https://stackoverflow.com/a/44750379/1438522
   try {
     const res = await git.raw(['symbolic-ref', 'refs/remotes/origin/HEAD']);
@@ -102,7 +108,7 @@ async function getDefaultBranch(git: Git.SimpleGit): Promise<string> {
 
 let config: LocalConfig = {} as any;
 
-let git: Git.SimpleGit | undefined;
+let git: SimpleGit | undefined;
 
 let privateKeySet = false;
 
@@ -249,7 +255,7 @@ export async function createBranch(
   sha: string
 ): Promise<void> {
   logger.debug(`createBranch(${branchName})`);
-  await git.reset('hard');
+  await git.reset(ResetMode.HARD);
   await git.raw(['clean', '-fd']);
   await git.checkout(['-B', branchName, sha]);
   await git.push('origin', branchName, { '--force': true });
@@ -315,7 +321,7 @@ export async function setBranch(branchName: string): Promise<string> {
         ).trim();
       }
       await git.checkout([branchName, '-f']);
-      await git.reset('hard');
+      await git.reset(ResetMode.HARD);
       const latestCommitDate = (await git.log({ n: 1 })).latest.date;
       logger.debug({ branchName, latestCommitDate }, 'latest commit');
     } catch (err) /* istanbul ignore next */ {
@@ -415,7 +421,7 @@ export async function deleteBranch(branchName: string): Promise<void> {
 }
 
 export async function mergeBranch(branchName: string): Promise<void> {
-  await git.reset('hard');
+  await git.reset(ResetMode.HARD);
   await git.checkout(['-B', branchName, 'origin/' + branchName]);
   await git.checkout(config.currentBranch);
   await git.merge(['--ff-only', branchName]);
@@ -509,7 +515,7 @@ export async function commitFiles({
     privateKeySet = true;
   }
   try {
-    await git.reset('hard');
+    await git.reset(ResetMode.HARD);
     await git.raw(['clean', '-fd']);
     await git.checkout(['-B', branchName, 'origin/' + config.currentBranch]);
     const fileNames = [];
diff --git a/package.json b/package.json
index 6caa004871a3c26e0da108adc1498a4fe89c2cf1..7de1917e9b1e243f45d287f640db04714e146199 100644
--- a/package.json
+++ b/package.json
@@ -162,7 +162,7 @@
     "semver-utils": "1.1.4",
     "shlex": "2.0.2",
     "shortid": "2.2.15",
-    "simple-git": "1.132.0",
+    "simple-git": "2.13.2",
     "slugify": "1.4.4",
     "toml": "3.0.0",
     "traverse": "0.6.6",
diff --git a/yarn.lock b/yarn.lock
index 844f5b8de453d233aeb16e92579f611b02a63796..eda1c823d9e37c29308808bb46c355308fc2993e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1137,6 +1137,18 @@
     "@types/yargs" "^15.0.0"
     chalk "^4.0.0"
 
+"@kwsites/file-exists@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz#ad1efcac13e1987d8dbaf235ef3be5b0d96faa99"
+  integrity sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==
+  dependencies:
+    debug "^4.1.1"
+
+"@kwsites/promise-deferred@^1.1.1":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz#8ace5259254426ccef57f3175bc64ed7095ed919"
+  integrity sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==
+
 "@nodelib/fs.scandir@2.1.3":
   version "2.1.3"
   resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b"
@@ -9063,12 +9075,14 @@ signale@^1.2.1:
     figures "^2.0.0"
     pkg-conf "^2.1.0"
 
-simple-git@1.132.0:
-  version "1.132.0"
-  resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-1.132.0.tgz#53ac4c5ec9e74e37c2fd461e23309f22fcdf09b1"
-  integrity sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==
+simple-git@2.13.2:
+  version "2.13.2"
+  resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-2.13.2.tgz#9cbd66fa7db943b0c863009e5086fc022f6c0bca"
+  integrity sha512-GXBwoTtgwrNWFqs/wo48UaWC18ckEK8HcwTM3znfUTz02J29kSsQXdulthciSE6hdfccT29PNPScfMTjE41ahg==
   dependencies:
-    debug "^4.0.1"
+    "@kwsites/file-exists" "^1.1.1"
+    "@kwsites/promise-deferred" "^1.1.1"
+    debug "^4.1.1"
 
 sinon@^9.0.1:
   version "9.0.2"