diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp
index c05af4310c534641cb2dc58af4d5e4a948f413eb..21ac311c7670340db6361d77704002219bb6e747 100644
--- a/src/plugins/git/gerrit/gerritplugin.cpp
+++ b/src/plugins/git/gerrit/gerritplugin.cpp
@@ -312,11 +312,8 @@ void GerritPlugin::push()
     // QScopedPointer is required to delete the dialog when leaving the function
     GerritPushDialog dialog(topLevel, m_reviewers, Core::ICore::mainWindow());
 
-    if (!dialog.localChangesFound()) {
-        QMessageBox::warning(Core::ICore::mainWindow(), tr("No Local Changes"),
-                              tr("Change from HEAD appears to be in remote branch already. Aborting."));
+    if (!dialog.localChangesFound())
         return;
-    }
 
     if (!dialog.valid()) {
         QMessageBox::warning(Core::ICore::mainWindow(), tr("Initialization Failed"),
diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp
index c5c52b602f1f0fdede8126916b514306dea384af..9dc42192dbd89a56d20d6fb36fb19a3b20cfbf75 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.cpp
+++ b/src/plugins/git/gerrit/gerritpushdialog.cpp
@@ -50,28 +50,21 @@ GerritPushDialog::GerritPushDialog(const QString &workingDir, const QString &rev
     m_ui->repositoryLabel->setText(tr("<b>Local repository:</b> %1").arg(
                                        QDir::toNativeSeparators(workingDir)));
 
-    m_ui->commitView->init(workingDir, QString(), false);
-    Git::Internal::GitClient *gitClient = Git::Internal::GitPlugin::instance()->gitClient();
-    QString output;
-    QString error;
-    QStringList args;
-
-    args << QLatin1String("--no-color") << QLatin1String("--format=%P")
-         << QLatin1String("HEAD") << QLatin1String("--not")<< QLatin1String("--remotes");
-
-    if (!gitClient->synchronousLog(m_workingDir, args, &output) || output.isEmpty())
+    if (!m_ui->commitView->init(workingDir, QString(), false))
         return;
 
-    output.chop(1);
-    if (output.isEmpty()) {
+    QString earliestCommit = m_ui->commitView->earliestCommit();
+    if (earliestCommit.isEmpty())
         return;
-    } else {
-        output = output.mid(output.lastIndexOf(QLatin1Char('\n')) + 1);
-        m_localChangesFound = true;
-    }
 
-    args.clear();
-    args << QLatin1String("--remotes") << QLatin1String("--contains") << output;
+    m_localChangesFound = true;
+
+    Git::Internal::GitClient *gitClient = Git::Internal::GitPlugin::instance()->gitClient();
+    QString output;
+    QString error;
+    QStringList args;
+    args << QLatin1String("--remotes") << QLatin1String("--contains")
+         << earliestCommit + QLatin1Char('^');
 
     if (!gitClient->synchronousBranchCmd(m_workingDir, args, &output, &error))
         return;
diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp
index 4f11be1d115e9d34f8410905846c09873483817f..bb8f444c9e1fa1442b574fac26f2ff116d618115 100644
--- a/src/plugins/git/logchangedialog.cpp
+++ b/src/plugins/git/logchangedialog.cpp
@@ -96,6 +96,16 @@ int LogChangeWidget::commitIndex() const
     return -1;
 }
 
+QString LogChangeWidget::earliestCommit() const
+{
+    int rows = m_model->rowCount();
+    if (rows) {
+        if (const QStandardItem *item = m_model->item(rows - 1, Sha1Column))
+            return item->text();
+    }
+    return QString();
+}
+
 void LogChangeWidget::emitDoubleClicked(const QModelIndex &index)
 {
     if (index.isValid()) {
diff --git a/src/plugins/git/logchangedialog.h b/src/plugins/git/logchangedialog.h
index 4e298519ac4a14dc0aaa465a7440f069a0773b75..a4790701b48a16478c430969ed829896e347d13c 100644
--- a/src/plugins/git/logchangedialog.h
+++ b/src/plugins/git/logchangedialog.h
@@ -56,6 +56,7 @@ public:
               bool includeRemote = true);
     QString commit() const;
     int commitIndex() const;
+    QString earliestCommit() const;
 
 signals:
     void doubleClicked(const QString &commit);