diff --git a/src/plugins/git/changeselectiondialog.cpp b/src/plugins/git/changeselectiondialog.cpp
index 476035b59047e1a81f49270fc6c244bf5a8e98af..2953f8f1736b9a5811ceb6f736a1522733701699 100644
--- a/src/plugins/git/changeselectiondialog.cpp
+++ b/src/plugins/git/changeselectiondialog.cpp
@@ -126,19 +126,22 @@ void ChangeSelectionDialog::selectCommitFromRecentHistory()
     if (workingDir.isEmpty())
         return;
 
+    QString commit = change();
+    int tilde = commit.indexOf(QLatin1Char('~'));
+    if (tilde != -1)
+        commit.truncate(tilde);
     QPointer<LogChangeDialog> dialog = new LogChangeDialog(false);
     dialog->setWindowTitle(tr("Select Commit"));
 
-    dialog->runDialog(workingDir);
+    dialog->runDialog(workingDir, commit);
 
     if (dialog->result() == QDialog::Rejected || dialog->commitIndex() == -1)
         return;
 
-    QString change = QLatin1String("HEAD");
     if (dialog->commitIndex() > 0)
-        change += QLatin1Char('~') + QString::number(dialog->commitIndex());
+        commit += QLatin1Char('~') + QString::number(dialog->commitIndex());
 
-    m_changeNumberEdit->setText(change);
+    m_changeNumberEdit->setText(commit);
 }
 
 void ChangeSelectionDialog::chooseWorkingDirectory()
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index ea843dde0a134d89368355854203e1be126d6dbc..3b8a0ac2f165e494c6fd059c427f855061e25662 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -769,7 +769,7 @@ void GitPlugin::startRebase()
         return;
     LogChangeDialog dialog(false);
     dialog.setWindowTitle(tr("Interactive Rebase"));
-    if (!dialog.runDialog(workingDirectory))
+    if (!dialog.runDialog(workingDirectory, QString(), false))
         return;
     const QString change = dialog.commit();
     if (!change.isEmpty())
diff --git a/src/plugins/git/gitsubmiteditorwidget.cpp b/src/plugins/git/gitsubmiteditorwidget.cpp
index ebcbbf74e033ea486a8ec6592c2d99aa4fc34de6..2e81fd8b67f558c8e01ed57642719d86cf9cb1f8 100644
--- a/src/plugins/git/gitsubmiteditorwidget.cpp
+++ b/src/plugins/git/gitsubmiteditorwidget.cpp
@@ -168,7 +168,7 @@ void GitSubmitEditorWidget::initialize(CommitType commitType, const QString &rep
         QVBoxLayout *logChangeLayout = new QVBoxLayout;
         logChangeGroupBox->setLayout(logChangeLayout);
         m_logChangeWidget = new LogChangeWidget;
-        m_logChangeWidget->init(repository);
+        m_logChangeWidget->init(repository, QString(), false);
         logChangeLayout->addWidget(m_logChangeWidget);
         insertTopWidget(logChangeGroupBox);
         m_gitSubmitPanelUi.editGroup->hide();
diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp
index 4509144256d459afcb4d3f31b9764ea511e1a79f..8621bc24d922dde012b214c4deaa833696cbd04f 100644
--- a/src/plugins/git/logchangedialog.cpp
+++ b/src/plugins/git/logchangedialog.cpp
@@ -64,9 +64,9 @@ LogChangeWidget::LogChangeWidget(QWidget *parent)
     setSelectionBehavior(QAbstractItemView::SelectRows);
 }
 
-bool LogChangeWidget::init(const QString &repository)
+bool LogChangeWidget::init(const QString &repository, const QString &commit, bool includeRemote)
 {
-    if (!populateLog(repository) || !m_model->rowCount())
+    if (!populateLog(repository, commit, includeRemote) || !m_model->rowCount())
         return false;
     selectionModel()->select(m_model->index(0, 0),
                              QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
@@ -89,7 +89,7 @@ int LogChangeWidget::commitIndex() const
     return -1;
 }
 
-bool LogChangeWidget::populateLog(const QString &repository)
+bool LogChangeWidget::populateLog(const QString &repository, const QString &commit, bool includeRemote)
 {
     if (const int rowCount = m_model->rowCount())
         m_model->removeRows(0, rowCount);
@@ -98,6 +98,9 @@ bool LogChangeWidget::populateLog(const QString &repository)
     GitClient *client = GitPlugin::instance()->gitClient();
     QStringList arguments;
     arguments << QLatin1String("--max-count=40") << QLatin1String("--format=%h:%s %d");
+    arguments << (commit.isEmpty() ? QLatin1String("HEAD") : commit);
+    if (!includeRemote)
+        arguments << QLatin1String("--not") << QLatin1String("--remotes");
     QString output;
     if (!client->synchronousLog(repository, arguments, &output))
         return false;
@@ -165,9 +168,9 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) :
     resize(600, 400);
 }
 
-bool LogChangeDialog::runDialog(const QString &repository)
+bool LogChangeDialog::runDialog(const QString &repository, const QString &commit, bool includeRemote)
 {
-    if (!widget->init(repository))
+    if (!widget->init(repository, commit, includeRemote))
         return QDialog::Rejected;
 
     return QDialog::exec() == QDialog::Accepted;
diff --git a/src/plugins/git/logchangedialog.h b/src/plugins/git/logchangedialog.h
index bfeb5b7e04819d90302637b187ca6aadfd59805b..83f31adcd4310222e1602dfd37d6c238a753b585 100644
--- a/src/plugins/git/logchangedialog.h
+++ b/src/plugins/git/logchangedialog.h
@@ -52,12 +52,13 @@ class LogChangeWidget : public QTreeView
 
 public:
     explicit LogChangeWidget(QWidget *parent = 0);
-    bool init(const QString &repository);
+    bool init(const QString &repository, const QString &commit = QString(),
+              bool includeRemote = true);
     QString commit() const;
     int commitIndex() const;
 
 private:
-    bool populateLog(const QString &repository);
+    bool populateLog(const QString &repository, const QString &commit, bool includeRemote);
     const QStandardItem *currentItem(int column = 0) const;
 
     QStandardItemModel *m_model;
@@ -69,7 +70,8 @@ class LogChangeDialog : public QDialog
 public:
     LogChangeDialog(bool isReset, QWidget *parent = 0);
 
-    bool runDialog(const QString &repository);
+    bool runDialog(const QString &repository, const QString &commit = QString(),
+                   bool includeRemote = true);
 
     QString commit() const;
     int commitIndex() const;