diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp
index 0e9c8c33f1651fcfcee8310b1cbd8c8618f1cf8b..37a7d3317362f539e3c62325510dfa80a5a52dbf 100644
--- a/src/plugins/git/branchdialog.cpp
+++ b/src/plugins/git/branchdialog.cpp
@@ -97,6 +97,12 @@ void BranchDialog::refresh(const QString &repository, bool force)
     m_ui->branchView->expandAll();
 }
 
+void BranchDialog::refreshIfSame(const QString &repository)
+{
+    if (m_repository == repository)
+        refresh();
+}
+
 void BranchDialog::enableButtons()
 {
     QModelIndex idx = selectedIndex();
diff --git a/src/plugins/git/branchdialog.h b/src/plugins/git/branchdialog.h
index c1b38ac6195ac1ce49b672b0fd69946b8c12dd99..aac316d1c8dfa1b76d0c5ebab334f5d2e226bbd1 100644
--- a/src/plugins/git/branchdialog.h
+++ b/src/plugins/git/branchdialog.h
@@ -61,6 +61,7 @@ public:
 
 public slots:
     void refresh(const QString &repository, bool force);
+    void refreshIfSame(const QString &repository);
 
 private slots:
     void enableButtons();
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index d23b76add44056cc9730a7e94709d109d859ca27..bb365dd1a06b27b79d6191a20542a15e0f1e2699 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -2331,6 +2331,11 @@ void GitClient::finishSubmoduleUpdate()
     m_updatedSubmodules.clear();
 }
 
+void GitClient::fetchFinished(const QVariant &cookie)
+{
+    GitPlugin::instance()->updateBranches(cookie.toString());
+}
+
 // Trim a git status file spec: "modified:    foo .cpp" -> "modified: foo .cpp"
 static inline QString trimFileSpecification(QString fileSpec)
 {
@@ -2930,7 +2935,9 @@ void GitClient::fetch(const QString &workingDirectory, const QString &remote)
 {
     QStringList arguments(QLatin1String("fetch"));
     arguments << (remote.isEmpty() ? QLatin1String("--all") : remote);
-    executeGit(workingDirectory, arguments, 0, true);
+    VcsBase::Command *command = executeGit(workingDirectory, arguments, 0, true);
+    command->setCookie(workingDirectory);
+    connect(command, SIGNAL(success(QVariant)), this, SLOT(fetchFinished(QVariant)));
 }
 
 bool GitClient::executeAndHandleConflicts(const QString &workingDirectory,
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index faf39964683e2c3fd26b89ee33f8f3a4f846d4ab..22e552d7da9036badb497e8eed06ca8c826adad8 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -323,6 +323,7 @@ private slots:
     void appendOutputData(const QByteArray &data) const;
     void appendOutputDataSilently(const QByteArray &data) const;
     void finishSubmoduleUpdate();
+    void fetchFinished(const QVariant &cookie);
 
 private:
     QTextCodec *getSourceCodec(const QString &file) const;
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index b7d4976978c79089cdb7557458c5c3d64ce9ebcf..9d3dda8d81abe603e3b184fdd8d9364300a90830 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -689,6 +689,8 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 
     connect(Core::ICore::vcsManager(), SIGNAL(repositoryChanged(QString)),
             this, SLOT(updateContinueAndAbortCommands()));
+    connect(Core::ICore::vcsManager(), SIGNAL(repositoryChanged(QString)),
+            this, SLOT(updateBranches(QString)));
 
     if (!Core::ICore::mimeDatabase()->addMimeTypes(QLatin1String(RC_GIT_MIME_XML), errorMessage))
         return false;
@@ -1427,6 +1429,12 @@ void GitPlugin::updateContinueAndAbortCommands()
     }
 }
 
+void GitPlugin::updateBranches(const QString &repository)
+{
+    if (m_branchDialog && m_branchDialog->isVisible())
+        m_branchDialog->refreshIfSame(repository);
+}
+
 void GitPlugin::updateRepositoryBrowserAction()
 {
     const bool repositoryEnabled = currentState().hasTopLevel();
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 4a70caedeebd5da6556299e91f61def7b27efb0d..468d54dca35c0116378f82009d7ce96bc84971bd 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -102,6 +102,7 @@ public:
 
 public slots:
     void startCommit();
+    void updateBranches(const QString &repository);
 
 private slots:
     void diffCurrentFile();