diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 5d0fe572578c6c17c2f59f4318f2fcaef3a2b513..a7d101681e7c784693042b14927dbb869ca9bc3e 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1040,9 +1040,8 @@ bool GitClient::synchronousParentRevisions(const QString &workingDirectory,
     QByteArray outputTextData;
     QByteArray errorText;
     QStringList arguments;
-    if (parents && (revision == QLatin1String("00000000"))) { // Not Committed Yet
-        parents->clear();
-        parents->append(QLatin1String("HEAD"));
+    if (parents && !isValidRevision(revision)) { // Not Committed Yet
+        *parents = QStringList(QLatin1String("HEAD"));
         return true;
     }
     arguments << QLatin1String("rev-list") << QLatin1String(GitClient::noColorOption)
@@ -1450,6 +1449,16 @@ QProcessEnvironment GitClient::processEnvironment() const
     return environment;
 }
 
+bool GitClient::isValidRevision(const QString &revision) const
+{
+    if (revision.length() < 1)
+        return false;
+    for (int i = 0; i < revision.length(); ++i)
+        if (revision.at(i) != QLatin1Char('0'))
+            return true;
+    return false;
+}
+
 // Synchronous git execution using Utils::SynchronousProcess, with
 // log windows updating.
 Utils::SynchronousProcessResponse GitClient::synchronousGit(const QString &workingDirectory,
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 815fa5ff337c73cbb8042d09e4a8e1d5c624370f..616f41cb3ab1830c38bd1add6ba500089d598e8c 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -220,6 +220,8 @@ public:
 
     QProcessEnvironment processEnvironment() const;
 
+    bool isValidRevision(const QString &revision) const;
+
     static QString msgNoChangedFiles();
 
     static const char *noColorOption;
diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp
index 9ea2bae97d942ab3b12dd4596309ab793552a80a..5fd3c6d54755c0b026078168355ce8b3074d8043 100644
--- a/src/plugins/git/giteditor.cpp
+++ b/src/plugins/git/giteditor.cpp
@@ -250,6 +250,11 @@ QStringList GitEditor::annotationPreviousVersions(const QString &revision) const
     return revisions;
 }
 
+bool GitEditor::isValidRevision(const QString &revision) const
+{
+    return GitPlugin::instance()->gitClient()->isValidRevision(revision);
+}
+
 } // namespace Internal
 } // namespace Git
 
diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h
index 4256de1c4e5999ef0b63b06fe25464a0a5dcd42b..fc5c19c201b80f85c6a780b6c155ac01f52218e8 100644
--- a/src/plugins/git/giteditor.h
+++ b/src/plugins/git/giteditor.h
@@ -63,6 +63,7 @@ private:
     virtual QString fileNameFromDiffSpecification(const QTextBlock &diffFileName) const;
     virtual QString decorateVersion(const QString &revision) const;
     virtual QStringList annotationPreviousVersions(const QString &revision) const;
+    virtual bool isValidRevision(const QString &revision) const;
 
     mutable QRegExp m_changeNumberPattern8;
     mutable QRegExp m_changeNumberPattern40;
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 2b4eb4e2517cb025420af738ffa53302fd3ab1f2..381fd2f9442be72082b6cdcb1461235882f850e4 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -351,7 +351,8 @@ void ChangeTextCursorHandler::fillContextMenu(QMenu *menu, EditorContentType typ
         menu->addAction(createCopyRevisionAction(m_currentChange));
         menu->addAction(createDescribeAction(m_currentChange));
         menu->addSeparator();
-        menu->addAction(createAnnotateAction(editorWidget()->decorateVersion(m_currentChange), false));
+        if (editorWidget()->isValidRevision(m_currentChange))
+            menu->addAction(createAnnotateAction(editorWidget()->decorateVersion(m_currentChange), false));
         const QStringList previousVersions = editorWidget()->annotationPreviousVersions(m_currentChange);
         if (!previousVersions.isEmpty()) {
             foreach (const QString &pv, previousVersions)
@@ -1428,6 +1429,12 @@ QString VcsBaseEditorWidget::decorateVersion(const QString &revision) const
     return revision;
 }
 
+bool VcsBaseEditorWidget::isValidRevision(const QString &revision) const
+{
+    Q_UNUSED(revision);
+    return true;
+}
+
 void VcsBaseEditorWidget::slotApplyDiffChunk()
 {
     const QAction *a = qobject_cast<QAction *>(sender());
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index d4ceb847e1c892ec57c63af3f0f1ff9d02b90c35..1b6a82d256cc65ab9bf86f3d976f2509b07d17ac 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -252,6 +252,8 @@ private:
     // Implement to return the previous version[s] of an annotation change
     // for "Annotate previous version"
     virtual QStringList annotationPreviousVersions(const QString &revision) const;
+    // Implement to validate revisions
+    virtual bool isValidRevision(const QString &revision) const;
     // cut out chunk and determine file name.
     DiffChunk diffChunk(QTextCursor cursor) const;