diff --git a/app/assets/javascripts/admin/addon/controllers/admin-customize-themes-show.js b/app/assets/javascripts/admin/addon/controllers/admin-customize-themes-show.js
index 770f541f6e6..9e9afda71d0 100644
--- a/app/assets/javascripts/admin/addon/controllers/admin-customize-themes-show.js
+++ b/app/assets/javascripts/admin/addon/controllers/admin-customize-themes-show.js
@@ -151,6 +151,15 @@ export default Controller.extend({
 
   hasTranslations: notEmpty("translations"),
 
+  @discourseComputed(
+    "model.remote_theme.local_version",
+    "model.remote_theme.remote_version",
+    "model.remote_theme.commits_behind"
+  )
+  hasOverwrittenHistory(localVersion, remoteVersion, commitsBehind) {
+    return localVersion !== remoteVersion && commitsBehind === -1;
+  },
+
   @discourseComputed("model.remoteError", "updatingRemote")
   showRemoteError(errorMessage, updating) {
     return errorMessage && !updating;
diff --git a/app/assets/javascripts/admin/addon/templates/customize-themes-show.hbs b/app/assets/javascripts/admin/addon/templates/customize-themes-show.hbs
index dba011faac9..fcb9bd2acdb 100644
--- a/app/assets/javascripts/admin/addon/templates/customize-themes-show.hbs
+++ b/app/assets/javascripts/admin/addon/templates/customize-themes-show.hbs
@@ -105,7 +105,11 @@
               {{i18n "admin.customize.theme.updating"}}
             {{else}}
               {{#if model.remote_theme.commits_behind}}
-                {{i18n "admin.customize.theme.commits_behind" count=model.remote_theme.commits_behind}}
+                {{#if hasOverwrittenHistory}}
+                  {{i18n "admin.customize.theme.has_overwritten_history"}}
+                {{else}}
+                  {{i18n "admin.customize.theme.commits_behind" count=model.remote_theme.commits_behind}}
+                {{/if}}
                 {{#if model.remote_theme.github_diff_link}}
                   <a href={{model.remote_theme.github_diff_link}}>
                     {{i18n "admin.customize.theme.compare_commits"}}
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index b12f6774ba7..de1483da0b3 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -4073,6 +4073,7 @@ en:
           check_for_updates: "Check for Updates"
           updating: "Updating..."
           up_to_date: "Theme is up-to-date, last checked:"
+          has_overwritten_history: "Current theme version no longer exists because the Git history has been overwritten by a force push."
           add: "Add"
           theme_settings: "Theme Settings"
           no_settings: "This theme has no settings."
diff --git a/lib/theme_store/git_importer.rb b/lib/theme_store/git_importer.rb
index b58724277dc..37fb49e6cdf 100644
--- a/lib/theme_store/git_importer.rb
+++ b/lib/theme_store/git_importer.rb
@@ -35,7 +35,7 @@ class ThemeStore::GitImporter
 
     Discourse::Utils.execute_command(chdir: @temp_folder) do |runner|
       commit_hash = runner.exec("git", "rev-parse", "HEAD").strip
-      commits_behind = runner.exec("git", "rev-list", "#{hash}..HEAD", "--count").strip
+      commits_behind = runner.exec("git", "rev-list", "#{hash}..HEAD", "--count").strip rescue -1
     end
 
     [commit_hash, commits_behind]
diff --git a/spec/models/remote_theme_spec.rb b/spec/models/remote_theme_spec.rb
index 6e634278421..9bb82c9d5cb 100644
--- a/spec/models/remote_theme_spec.rb
+++ b/spec/models/remote_theme_spec.rb
@@ -158,6 +158,29 @@ describe RemoteTheme do
       scheme = ColorScheme.find_by(theme_id: @theme.id)
       expect(scheme.colors.find_by(name: 'tertiary_low_color')).to eq(nil)
     end
+
+    it "can update themes with overwritten history" do
+      theme = RemoteTheme.import_theme(initial_repo)
+      remote = theme.remote_theme
+
+      old_version = `cd #{initial_repo} && git rev-parse HEAD`.strip
+      expect(theme.name).to eq('awesome theme')
+      expect(remote.remote_url).to eq(initial_repo)
+      expect(remote.local_version).to eq(old_version)
+      expect(remote.remote_version).to eq(old_version)
+
+      `cd #{initial_repo} && git commit --amend -m "amended commit"`
+      new_version = `cd #{initial_repo} && git rev-parse HEAD`.strip
+
+      # make sure that the amended commit does not exist anymore
+      `cd #{initial_repo} && git reflog expire --all --expire=now`
+      `cd #{initial_repo} && git prune`
+
+      remote.update_remote_version
+      expect(remote.reload.local_version).to eq(old_version)
+      expect(remote.reload.remote_version).to eq(new_version)
+      expect(remote.reload.commits_behind).to eq(-1)
+    end
   end
 
   let(:github_repo) do