diff --git a/src/plugins/git/branchmodel.cpp b/src/plugins/git/branchmodel.cpp
index 69e4ee54664cce9332ae489f052640deda6426a0..4d577597f11890afbd3b2ef8cee825766e1c66fc 100644
--- a/src/plugins/git/branchmodel.cpp
+++ b/src/plugins/git/branchmodel.cpp
@@ -74,7 +74,7 @@ public:
 
     bool isLeaf() const
     {
-        return children.isEmpty();
+        return children.isEmpty() && parent && parent->parent;
     }
 
     bool isTag() const
@@ -331,8 +331,12 @@ void BranchModel::clear()
 
 bool BranchModel::refresh(const QString &workingDirectory, QString *errorMessage)
 {
-    if (workingDirectory.isEmpty())
+    beginResetModel();
+    clear();
+    if (workingDirectory.isEmpty()) {
+        endResetModel();
         return false;
+    }
 
     m_currentSha = m_client->synchronousTopRevision(workingDirectory);
     QStringList args;
@@ -341,9 +345,6 @@ bool BranchModel::refresh(const QString &workingDirectory, QString *errorMessage
     if (!m_client->synchronousForEachRefCmd(workingDirectory, args, &output, errorMessage))
         VcsBase::VcsBaseOutputWindow::instance()->appendError(*errorMessage);
 
-    beginResetModel();
-    clear();
-
     m_workingDirectory = workingDirectory;
     const QStringList lines = output.split(QLatin1Char('\n'));
     foreach (const QString &l, lines)