diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index b7ad77b1d532a7185295576a0393fd5a17613294..1646f366a9a5eff1250cb204f96b9bd67e62480a 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1152,7 +1152,8 @@ static inline QString trimFileSpecification(QString fileSpec)
 GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory,
                                              bool untracked,
                                              QString *output,
-                                             QString *errorMessage)
+                                             QString *errorMessage,
+                                             bool *onBranch)
 {
     // Run 'status'. Note that git returns exitcode 1 if there are no added files.
     QByteArray outputText;
@@ -1165,8 +1166,11 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory,
     GitCommand::removeColorCodes(&outputText);
     if (output)
         *output = commandOutputFromLocal8Bit(outputText);
+    const bool branchKnown = outputText.contains(kBranchIndicatorC);
+    if (onBranch)
+        *onBranch = branchKnown;
     // Is it something really fatal?
-    if (!statusRc && !outputText.contains(kBranchIndicatorC)) {
+    if (!statusRc && !branchKnown && !outputText.contains("# Not currently on any branch.")) {
         if (errorMessage) {
             const QString error = commandOutputFromLocal8Bit(errorText);
             *errorMessage = tr("Unable to obtain the status: %1").arg(error);
@@ -1214,9 +1218,14 @@ bool GitClient::getCommitData(const QString &workingDirectory,
     }
 
     // Run status. Note that it has exitcode 1 if there are no added files.
+    bool onBranch;
     QString output;
-    switch (gitStatus(repoDirectory, true, &output, errorMessage)) {
+    switch (gitStatus(repoDirectory, true, &output, errorMessage, &onBranch)) {
     case  StatusChanged:
+        if (!onBranch) {
+            *errorMessage = tr("You did not checkout a branch.");
+            return false;
+        }
         break;
     case StatusUnchanged:
         *errorMessage = msgNoChangedFiles();
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 42b2e1bb1c885d7615657321cca5903262c24a89..1d7d7570bda022c1a1d2ab827d3b1cfe64ea5405 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -191,7 +191,8 @@ public:
     StatusResult gitStatus(const QString &workingDirectory,
                            bool untracked = false,
                            QString *output = 0,
-                           QString *errorMessage = 0);
+                           QString *errorMessage = 0,
+                           bool *onBranch = 0);
 
     GitSettings  settings() const;
     void setSettings(const GitSettings &s);