diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp
index c21b6166ddba0348d49995264b69e5c57c5a4b9e..8e979d8208bf17a1329299fedfcc36f97c7964b4 100644
--- a/src/plugins/git/giteditor.cpp
+++ b/src/plugins/git/giteditor.cpp
@@ -37,6 +37,7 @@
 #include "gitconstants.h"
 #include "githighlighters.h"
 
+#include <coreplugin/icore.h>
 #include <utils/qtcassert.h>
 #include <vcsbase/vcsbaseoutputwindow.h>
 #include <texteditor/basetextdocument.h>
@@ -212,6 +213,32 @@ void GitEditor::commandFinishedGotoLine(bool ok, int exitCode, const QVariant &v
     }
 }
 
+void GitEditor::checkoutChange()
+{
+    const QFileInfo fi(source());
+    const QString workingDirectory = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath();
+    GitPlugin::instance()->gitClient()->stashAndCheckout(workingDirectory, m_currentChange);
+}
+
+void GitEditor::resetChange()
+{
+    const QFileInfo fi(source());
+    const QString workingDir = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath();
+
+    GitClient *client = GitPlugin::instance()->gitClient();
+    if (client->gitStatus(workingDir, StatusMode(NoUntracked | NoSubmodules))
+            != GitClient::StatusUnchanged) {
+        if (QMessageBox::question(
+                    Core::ICore::mainWindow(), tr("Reset"),
+                    tr("All changes in working directory will be discarded. Are you sure?"),
+                    QMessageBox::Yes | QMessageBox::No,
+                    QMessageBox::No) == QMessageBox::No) {
+            return;
+        }
+    }
+    client->reset(workingDir, QLatin1String("--hard"), m_currentChange);
+}
+
 void GitEditor::cherryPickChange()
 {
     const QFileInfo fi(source());
@@ -344,6 +371,8 @@ void GitEditor::addChangeActions(QMenu *menu, const QString &change)
     if (contentType() != VcsBase::OtherContent) {
         menu->addAction(tr("Cherry-Pick Change %1").arg(change), this, SLOT(cherryPickChange()));
         menu->addAction(tr("Revert Change %1").arg(change), this, SLOT(revertChange()));
+        menu->addAction(tr("Checkout Change %1").arg(change), this, SLOT(checkoutChange()));
+        menu->addAction(tr("Hard Reset to Change %1").arg(change), this, SLOT(resetChange()));
     }
 }
 
diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h
index 5943485e34495fe44ad97a51ee2698407b16ec4a..35bfd53ef34dd08fb52e13738831fb35b8510913 100644
--- a/src/plugins/git/giteditor.h
+++ b/src/plugins/git/giteditor.h
@@ -55,6 +55,8 @@ public slots:
     void commandFinishedGotoLine(bool ok, int exitCode, const QVariant &v);
 
 private slots:
+    void checkoutChange();
+    void resetChange();
     void cherryPickChange();
     void revertChange();
     void stageDiffChunk();