diff --git a/src/libs/utils/submiteditorwidget.h b/src/libs/utils/submiteditorwidget.h
index 37d1c8b0bd959764b8a77625aaf6045b5f8288a4..c5bee5e357c32545d2f557b2b4c2f8d867963230 100644
--- a/src/libs/utils/submiteditorwidget.h
+++ b/src/libs/utils/submiteditorwidget.h
@@ -126,6 +126,8 @@ public:
     void addSubmitFieldWidget(SubmitFieldWidget *f);
     QList<SubmitFieldWidget *> submitFieldWidgets() const;
 
+    virtual bool canSubmit() const;
+
 signals:
     void diffSelected(const QStringList &);
     void fileSelectionChanged(bool someFileSelected);
@@ -139,7 +141,6 @@ public slots:
 protected:
     virtual void changeEvent(QEvent *e);
     void insertTopWidget(QWidget *w);
-    virtual bool canSubmit() const;
 
 protected slots:
     void updateSubmitAction();
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 25113a7a6def22b3fdbb269ab6cc86b0798d53d0..3f26eaf8f4a0a53b543f11fcc91f98c1b96b1909 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -756,8 +756,8 @@ bool GitPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *submitEdi
     const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult answer =
             editor->promptSubmit(tr("Closing Git Editor"),
                                  tr("Do you want to commit the change?"),
-                                 tr("The commit message check failed. Do you want to commit the change?"),
-                                 &settings.promptToSubmit, !m_submitActionTriggered);
+                                 tr("Git will not accept this commit. Do you want to continue to edit it?"),
+                                 &settings.promptToSubmit, !m_submitActionTriggered, false);
     m_submitActionTriggered = false;
     switch (answer) {
     case VCSBase::VCSBaseSubmitEditor::SubmitCanceled:
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index cfc10e88b888da00e06e4840edfee2f9048aed3b..a3a2b9618a5930f713e783862b58d687e0a1b1c4 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -464,8 +464,12 @@ VCSBaseSubmitEditor::PromptSubmitResult
                                           const QString &question,
                                           const QString &checkFailureQuestion,
                                           bool *promptSetting,
-                                          bool forcePrompt) const
+                                          bool forcePrompt,
+                                          bool canCommitOnFailure) const
 {
+    Utils::SubmitEditorWidget *submitWidget =
+            static_cast<Utils::SubmitEditorWidget *>(const_cast<VCSBaseSubmitEditor *>(this)->widget());
+
     raiseSubmitEditor();
 
     QString errorMessage;
@@ -476,7 +480,8 @@ VCSBaseSubmitEditor::PromptSubmitResult
     QWidget *parent = Core::ICore::instance()->mainWindow();
     // Pop up a message depending on whether the check succeeded and the
     // user wants to be prompted
-    if (checkSubmitMessage(&errorMessage)) {
+    bool canCommit = checkSubmitMessage(&errorMessage) && submitWidget->canSubmit();
+    if (canCommit) {
         // Check ok, do prompt?
         if (prompt) {
             // Provide check box to turn off prompt ONLY if it was not forced
@@ -503,14 +508,26 @@ VCSBaseSubmitEditor::PromptSubmitResult
         msgBox.setMinimumWidth(checkDialogMinimumWidth);
         answer = static_cast<QMessageBox::StandardButton>(msgBox.exec());
     }
-    switch (answer) {
-    case QMessageBox::No:
-        return SubmitDiscarded;
-    case QMessageBox::Yes:
-        return SubmitConfirmed;
-    default:
-        break;
+    if (!canCommit && !canCommitOnFailure) {
+        switch (answer) {
+        case QMessageBox::No:
+                return SubmitDiscarded;
+        case QMessageBox::Yes:
+                return SubmitCanceled;
+        default:
+            break;
+        }
+    } else {
+        switch (answer) {
+        case QMessageBox::No:
+            return SubmitDiscarded;
+        case QMessageBox::Yes:
+            return SubmitConfirmed;
+        default:
+            break;
+        }
     }
+
     return SubmitCanceled;
 }
 
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 2880043c53366a57a2280e5afa209ebd8b1bb278..a92207b733edda5e253c356405df8b70d6b56ae8 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -115,7 +115,8 @@ public:
     PromptSubmitResult promptSubmit(const QString &title, const QString &question,
                                     const QString &checkFailureQuestion,
                                     bool *promptSetting,
-                                    bool forcePrompt = false) const;
+                                    bool forcePrompt = false,
+                                    bool canCommitOnFailure = true) const;
 
     int fileNameColumn() const;
     void setFileNameColumn(int c);