diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index da61f23b1cf6877e5ef373c74ce04019c3f20554..7eabc65001eabd7bbc14c04833904eba3fb975f6 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -783,7 +783,8 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory,
                              const GitSubmitEditorPanelData &data,
                              const QString &messageFile,
                              const QStringList &checkedFiles,
-                             const QStringList &origCommitFiles)
+                             const QStringList &origCommitFiles,
+                             const QStringList &origDeletedFiles)
 {
     if (Git::Constants::debug)
         qDebug() << "GitClient::addAndCommit:" << repositoryDirectory << checkedFiles << origCommitFiles;
@@ -795,9 +796,12 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory,
         if (!synchronousReset(repositoryDirectory, resetFiles.toList()))
             return false;
 
-    // Re-add all to make sure we have the latest changes
-    if (!synchronousAdd(repositoryDirectory, checkedFiles))
-        return false;
+    // Re-add all to make sure we have the latest changes, but only add those that aren't marked
+    // for deletion
+    QStringList addFiles = checkedFiles.toSet().subtract(origDeletedFiles.toSet()).toList();
+    if (!addFiles.isEmpty())
+        if (!synchronousAdd(repositoryDirectory, addFiles))
+            return false;
 
     // Do the final commit
     QStringList args;
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 8807218da30f2154e14e0c6175a4f0f45caa83f1..5ac85f41dc77a759dcd31a2a7a96ecd3085c5a56 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -123,7 +123,8 @@ public:
                       const GitSubmitEditorPanelData &data,
                       const QString &messageFile,
                       const QStringList &checkedFiles,
-                      const QStringList &origCommitFiles);
+                      const QStringList &origCommitFiles,
+                      const QStringList &origDeletedFiles);
 
     enum StatusResult { StatusChanged, StatusUnchanged, StatusFailed };
     StatusResult gitStatus(const QString &workingDirectory,
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index ac3cfb2d2d8ad91b9923ddfde6b38935ee7e623a..ef327da7c34e9506095b1f3177a30c33b652c0cd 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -614,6 +614,7 @@ void GitPlugin::startCommit()
     // files to be able to unstage files the user unchecks
     m_submitRepository = data.panelInfo.repository;
     m_submitOrigCommitFiles = data.stagedFileNames();
+    m_submitOrigDeleteFiles = data.stagedFileNames("deleted");
 
     if (Git::Constants::debug)
         qDebug() << Q_FUNC_INFO << data << commitTemplate;
@@ -709,7 +710,8 @@ bool GitPlugin::editorAboutToClose(Core::IEditor *iEditor)
                                                 editor->panelData(),
                                                 m_changeTmpFile->fileName(),
                                                 fileList,
-                                                m_submitOrigCommitFiles);
+                                                m_submitOrigCommitFiles,
+                                                m_submitOrigDeleteFiles);
     }
     if (closeEditor)
         cleanChangeTmpFile();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index da5af49bb7412ab365cbc7690951b90bd512a76f..a218052c37be8314c7643cf47066c94410dd4a6c 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -173,6 +173,7 @@ private:
     Core::IVersionControl       *m_versionControl;
     QString                     m_submitRepository;
     QStringList                 m_submitOrigCommitFiles;
+    QStringList                 m_submitOrigDeleteFiles;
     QTemporaryFile              *m_changeTmpFile;
     bool                        m_submitActionTriggered;
 };
diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp
index 4de97513fd37ba7a62a28db7cb782d3be4c97cc5..272222cd4e2ad53c2ac73f58fe21bcd98b8f5424 100644
--- a/src/plugins/git/gitsubmiteditor.cpp
+++ b/src/plugins/git/gitsubmiteditor.cpp
@@ -63,11 +63,10 @@ GitSubmitEditorWidget *GitSubmitEditor::submitEditorWidget()
 
 // Utility to add a list of state/file pairs to the model
 // setting a file type.
-static void addStateFileListToModel(const QList<CommitData::StateFilePair> &l,                               
+static void addStateFileListToModel(const QList<CommitData::StateFilePair> &l,
                                     bool checked, FileType ft,
                                     VCSBase::SubmitFileModel *model)
 {
-
     typedef QList<CommitData::StateFilePair>::const_iterator ConstIterator;
     if (!l.empty()) {
         const ConstIterator cend = l.constEnd();