diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 8b89f7f7be71b801788929a78f09ef648856d7dc..3ad47bd62048ea1c6f7dca4a5ecd57705485cb49 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -637,7 +637,7 @@ public:
                           const QString &directory,
                           bool enableAnnotationContextMenu,
                           const QStringList &args,
-                          const QString &fileName) :
+                          const QStringList &fileNames) :
         BaseGitDiffArgumentsWidget(client, directory, args),
         m_client(client),
         m_workingDirectory(directory),
@@ -657,24 +657,24 @@ public:
         QToolButton *graphButton = addToggleButton(graphArguments, tr("Graph"),
                                               tr("Show textual graph log."));
         mapSetting(graphButton, m_client->settings()->boolPointer(GitSettings::graphLogKey));
-        setFileName(fileName);
+        setFileNames(fileNames);
     }
 
-    void setFileName(const QString &fileNames)
+    void setFileNames(const QStringList &fileNames)
     {
-        m_fileName = fileNames;
+        m_fileNames = fileNames;
     }
 
     void executeCommand()
     {
-        m_client->log(m_workingDirectory, m_fileName, m_enableAnnotationContextMenu, baseArguments());
+        m_client->log(m_workingDirectory, m_fileNames, m_enableAnnotationContextMenu, baseArguments());
     }
 
 private:
     GitClient *m_client;
     QString m_workingDirectory;
     bool m_enableAnnotationContextMenu;
-    QString m_fileName;
+    QStringList m_fileNames;
 };
 
 class ConflictHandler : public QObject
@@ -1113,19 +1113,20 @@ void GitClient::status(const QString &workingDirectory)
             Qt::QueuedConnection);
 }
 
-void GitClient::log(const QString &workingDirectory, const QString &fileName,
+void GitClient::log(const QString &workingDirectory, const QStringList &fileNames,
                     bool enableAnnotationContextMenu, const QStringList &args)
 {
-    const QString msgArg = fileName.isEmpty() ? workingDirectory : fileName;
+    const QString msgArg = fileNames.empty() ? workingDirectory :
+                           fileNames.join(QLatin1String(", "));
     const QString title = tr("Git Log \"%1\"").arg(msgArg);
     const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
-    const QString sourceFile = VcsBase::VcsBaseEditorWidget::getSource(workingDirectory, fileName);
+    const QString sourceFile = VcsBase::VcsBaseEditorWidget::getSource(workingDirectory, fileNames);
     VcsBase::VcsBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile);
     if (!editor)
         editor = createVcsEditor(editorId, title, sourceFile, CodecLogOutput, "logFileName", sourceFile,
                                  new GitLogArgumentsWidget(this, workingDirectory,
                                                            enableAnnotationContextMenu,
-                                                           args, fileName));
+                                                           args, fileNames));
     editor->setFileLogAnnotateEnabled(enableAnnotationContextMenu);
     editor->setDiffBaseDirectory(workingDirectory);
 
@@ -1139,13 +1140,13 @@ void GitClient::log(const QString &workingDirectory, const QString &fileName,
 
     GitLogArgumentsWidget *argWidget = qobject_cast<GitLogArgumentsWidget *>(editor->configurationWidget());
     argWidget->setBaseArguments(args);
-    argWidget->setFileName(fileName);
+    argWidget->setFileNames(fileNames);
     QStringList userArgs = argWidget->arguments();
 
     arguments.append(userArgs);
 
-    if (!fileName.isEmpty())
-        arguments << QLatin1String("--") << fileName;
+    if (!fileNames.isEmpty())
+        arguments << QLatin1String("--") << fileNames;
 
     executeGit(workingDirectory, arguments, editor);
 }
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index fa7ac9a921215148fb3d10e9f46d1f1731ef5c75..47e27ccf5b975ac379498ded12550844d9bebac6 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -146,7 +146,7 @@ public:
     void merge(const QString &workingDirectory, const QStringList &unmergedFileNames = QStringList());
 
     void status(const QString &workingDirectory);
-    void log(const QString &workingDirectory, const QString &fileName = QString(),
+    void log(const QString &workingDirectory, const QStringList &fileNames = QStringList(),
              bool enableAnnotationContextMenu = false, const QStringList &args = QStringList());
     void blame(const QString &workingDirectory, const QStringList &args, const QString &fileName,
                const QString &revision = QString(), int lineNumber = -1);
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 1692b780d2646d65b6d692a3a4444d3b45833241..6801a973900a01ca5c034a3a63a4c9586df0c10e 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -744,7 +744,7 @@ void GitPlugin::diffCurrentProject()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasProject(), return);
-    m_gitClient->diff(state.currentProjectTopLevel(), QStringList(state.relativeCurrentProject()));
+    m_gitClient->diff(state.currentProjectTopLevel(), state.relativeCurrentProject());
 }
 
 void GitPlugin::diffRepository()
@@ -758,7 +758,7 @@ void GitPlugin::logFile()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return);
-    m_gitClient->log(state.currentFileTopLevel(), state.relativeCurrentFile(), true);
+    m_gitClient->log(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
 }
 
 void GitPlugin::blameFile()
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index e47fb10f06435494326a58598164fada5ad15577..9d1905ccc7cf85d418730bc8fa4bca2f775d2c48 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -404,12 +404,13 @@ QString VcsBasePluginState::currentProjectTopLevel() const
     return data->m_state.currentProjectTopLevel;
 }
 
-QString VcsBasePluginState::relativeCurrentProject() const
+QStringList VcsBasePluginState::relativeCurrentProject() const
 {
-    QTC_ASSERT(hasProject(), return QString());
+    QStringList rc;
+    QTC_ASSERT(hasProject(), return rc);
     if (data->m_state.currentProjectTopLevel != data->m_state.currentProjectPath)
-        return QDir(data->m_state.currentProjectTopLevel).relativeFilePath(data->m_state.currentProjectPath);
-    return QString();
+        rc.append(QDir(data->m_state.currentProjectTopLevel).relativeFilePath(data->m_state.currentProjectPath));
+    return rc;
 }
 
 bool VcsBasePluginState::hasTopLevel() const
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index f657f55871527fcd6a6597b0b75b8e3d72567a77..8c1f5fe39b191a0454c985d8b3e1c86413db9c78 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -96,7 +96,7 @@ public:
     /* Convenience: Returns project path relative to top level if it
      * differs from top level (else empty()) as an argument list to do
      * eg a 'vcs diff <args>' */
-    QString relativeCurrentProject() const;
+    QStringList relativeCurrentProject() const;
 
     // Top level directory for actions on the top level. Preferably
     // the file one.