diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb
index 63eb4eb8fd83ff2e6c58ab7a54b98466c7d4b410..a8c14c8c91edda8a9a9c500ef2151dfa3e765086 100644
--- a/app/mailers/emails/projects.rb
+++ b/app/mailers/emails/projects.rb
@@ -48,6 +48,25 @@ def repository_cleanup_failure_email(project, user, error)
       mail_with_locale(to: user.notification_email_for(project.group), subject: subject("Project cleanup failure"))
     end
 
+    def repository_rewrite_history_success_email(project, user)
+      @project = project
+
+      email_with_layout(
+        to: user.notification_email_for(project.group),
+        subject: subject("Project history rewrite has completed")
+      )
+    end
+
+    def repository_rewrite_history_failure_email(project, user, error)
+      @project = project
+      @error = error
+
+      email_with_layout(
+        to: user.notification_email_for(project.group),
+        subject: subject("Project history rewrite failure")
+      )
+    end
+
     def repository_push_email(project_id, opts = {})
       @message =
         Gitlab::Email::Message::RepositoryPush.new(self, project_id, opts)
diff --git a/app/mailers/previews/notify_preview.rb b/app/mailers/previews/notify_preview.rb
index 73ed87a5c255a208b49f55e08db0f9030614bbe9..091daaff1a73e2d02d88635932b08c8fac6c9af8 100644
--- a/app/mailers/previews/notify_preview.rb
+++ b/app/mailers/previews/notify_preview.rb
@@ -379,6 +379,14 @@ def import_source_user_rejected
     Notify.import_source_user_rejected(source_user.id)
   end
 
+  def repository_rewrite_history_success_email
+    Notify.repository_rewrite_history_success_email(project, user)
+  end
+
+  def repository_rewrite_history_failure_email
+    Notify.repository_rewrite_history_failure_email(project, user, 'Error message')
+  end
+
   private
 
   def project
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 4d3bf1efedca6f0adde6e5a06e5a2079ad0040f3..0155d009722e9be0977c56e3cd21f3728da78aab 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -700,6 +700,18 @@ def repository_cleanup_failure(project, user, error)
     mailer.send(:repository_cleanup_failure_email, project, user, error).deliver_later
   end
 
+  def repository_rewrite_history_success(project, user)
+    return if project.emails_disabled?
+
+    mailer.repository_rewrite_history_success_email(project, user).deliver_later
+  end
+
+  def repository_rewrite_history_failure(project, user, error)
+    return if project.emails_disabled?
+
+    mailer.repository_rewrite_history_failure_email(project, user, error).deliver_later
+  end
+
   def remote_mirror_update_failed(remote_mirror)
     recipients = project_maintainers_recipients(remote_mirror, action: 'update_failed')
 
diff --git a/app/views/notify/repository_rewrite_history_failure_email.html.haml b/app/views/notify/repository_rewrite_history_failure_email.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..323c0038e39bc76c59c8aabff22f439edbec7c9c
--- /dev/null
+++ b/app/views/notify/repository_rewrite_history_failure_email.html.haml
@@ -0,0 +1,4 @@
+%p
+  = s_('Notify|Repository history rewrite failed on %{project_url}.') % { project_url: @project.web_url }
+%p
+  = @error
diff --git a/app/views/notify/repository_rewrite_history_failure_email.text.erb b/app/views/notify/repository_rewrite_history_failure_email.text.erb
new file mode 100644
index 0000000000000000000000000000000000000000..7a35e29a3a9af46b5534a15dc03b329e37c24268
--- /dev/null
+++ b/app/views/notify/repository_rewrite_history_failure_email.text.erb
@@ -0,0 +1,3 @@
+Repository history rewrite failed on <%= @project.web_url %>
+
+<%= @error %>
diff --git a/app/views/notify/repository_rewrite_history_success_email.html.haml b/app/views/notify/repository_rewrite_history_success_email.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..c982f5ff1995759cd2424af15f298a812c9ae708
--- /dev/null
+++ b/app/views/notify/repository_rewrite_history_success_email.html.haml
@@ -0,0 +1,4 @@
+%p
+  = s_('Notify|Repository history rewrite succeeded on %{project_url}.') % { project_url: @project.web_url }
+%p
+  = s_('Notify|Repository size is now %{repository_size} MiB.') % { repository_size: "%.1f" % (@project.repository.size || 0) }
diff --git a/app/views/notify/repository_rewrite_history_success_email.text.erb b/app/views/notify/repository_rewrite_history_success_email.text.erb
new file mode 100644
index 0000000000000000000000000000000000000000..2ee613b5cc47dae13f26d6dfdda5414f566c36ac
--- /dev/null
+++ b/app/views/notify/repository_rewrite_history_success_email.text.erb
@@ -0,0 +1,3 @@
+Repository history rewrite succeeded on <%= @project.web_url %>
+
+Repository size is now <%= "%.1f" % (@project.repository.size || 0) %> MiB
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index d7aecf8d85f0fc4b127c232deddccaec66b84a4a..5fc129c2f899ed335bc2e79c94f3fdddb00f1764 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -36905,6 +36905,15 @@ msgstr ""
 msgid "Notify|Remote mirror"
 msgstr ""
 
+msgid "Notify|Repository history rewrite failed on %{project_url}."
+msgstr ""
+
+msgid "Notify|Repository history rewrite succeeded on %{project_url}."
+msgstr ""
+
+msgid "Notify|Repository size is now %{repository_size} MiB."
+msgstr ""
+
 msgid "Notify|Review changes"
 msgstr ""
 
diff --git a/spec/mailers/emails/projects_spec.rb b/spec/mailers/emails/projects_spec.rb
index 94ef98dafe2b21f74b69c2d12792ca11b6e7459e..8062a4914041653c0570ccce481416c324ebed43 100644
--- a/spec/mailers/emails/projects_spec.rb
+++ b/spec/mailers/emails/projects_spec.rb
@@ -140,6 +140,46 @@
     end
   end
 
+  describe '#repository_rewrite_history_success_email' do
+    let(:recipient) { user }
+
+    subject { Notify.repository_rewrite_history_success_email(project, user) }
+
+    it_behaves_like 'an email sent to a user'
+    it_behaves_like 'an email sent from GitLab'
+    it_behaves_like 'it should not have Gmail Actions links'
+    it_behaves_like 'a user cannot unsubscribe through footer link'
+    it_behaves_like 'appearance header and footer enabled'
+    it_behaves_like 'appearance header and footer not enabled'
+
+    it 'has the correct subject and body' do
+      is_expected.to have_subject("#{project.name} | Project history rewrite has completed")
+      is_expected.to have_body_text(project.full_path)
+      is_expected.to have_body_text("Repository history rewrite succeeded on")
+    end
+  end
+
+  describe '#repository_rewrite_history_failure_email' do
+    let(:recipient) { user }
+    let(:error) { 'Some error' }
+
+    subject { Notify.repository_rewrite_history_failure_email(project, user, error) }
+
+    it_behaves_like 'an email sent to a user'
+    it_behaves_like 'an email sent from GitLab'
+    it_behaves_like 'it should not have Gmail Actions links'
+    it_behaves_like 'a user cannot unsubscribe through footer link'
+    it_behaves_like 'appearance header and footer enabled'
+    it_behaves_like 'appearance header and footer not enabled'
+
+    it 'has the correct subject and body' do
+      is_expected.to have_subject("#{project.name} | Project history rewrite failure")
+      is_expected.to have_body_text(project.full_path)
+      is_expected.to have_body_text("Repository history rewrite failed on")
+      is_expected.to have_body_text(error)
+    end
+  end
+
   describe '.inactive_project_deletion_warning_email' do
     let(:recipient) { user }
     let(:deletion_date) { "2022-01-10" }
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index e1a77582aba65c3be57d97b772a78cef46d83200..1b47c73e9d3da54ff250afec00260fdfcfdede33 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -4105,6 +4105,36 @@ def create_pipeline(user, status)
     end
   end
 
+  describe 'Repository rewrite history', :deliver_mails_inline do
+    let(:user) { create(:user) }
+
+    describe '#repository_rewrite_history_success' do
+      it 'emails the specified user only' do
+        notification.repository_rewrite_history_success(project, user)
+
+        should_email(user)
+      end
+
+      it_behaves_like 'project emails are disabled' do
+        let(:notification_target)  { project }
+        let(:notification_trigger) { notification.repository_rewrite_history_success(project, user) }
+      end
+    end
+
+    describe '#repository_rewrite_history_failure' do
+      it 'emails the specified user only' do
+        notification.repository_rewrite_history_failure(project, user, 'Some error')
+
+        should_email(user)
+      end
+
+      it_behaves_like 'project emails are disabled' do
+        let(:notification_target)  { project }
+        let(:notification_trigger) { notification.repository_rewrite_history_failure(project, user, 'Some error') }
+      end
+    end
+  end
+
   describe 'Repository cleanup', :deliver_mails_inline do
     let(:user) { create(:user) }