<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 8.6.10" />
<title>git-reset(1)</title>
<style type="text/css">
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */

/* Default font. */
body {
  font-family: Georgia,serif;
}

/* Title font. */
h1, h2, h3, h4, h5, h6,
div.title, caption.title,
thead, p.table.header,
#toctitle,
#author, #revnumber, #revdate, #revremark,
#footer {
  font-family: Arial,Helvetica,sans-serif;
}

body {
  margin: 1em 5% 1em 5%;
}

a {
  color: blue;
  text-decoration: underline;
}
a:visited {
  color: fuchsia;
}

em {
  font-style: italic;
  color: navy;
}

strong {
  font-weight: bold;
  color: #083194;
}

h1, h2, h3, h4, h5, h6 {
  color: #527bbd;
  margin-top: 1.2em;
  margin-bottom: 0.5em;
  line-height: 1.3;
}

h1, h2, h3 {
  border-bottom: 2px solid silver;
}
h2 {
  padding-top: 0.5em;
}
h3 {
  float: left;
}
h3 + * {
  clear: left;
}
h5 {
  font-size: 1.0em;
}

div.sectionbody {
  margin-left: 0;
}

hr {
  border: 1px solid silver;
}

p {
  margin-top: 0.5em;
  margin-bottom: 0.5em;
}

ul, ol, li > p {
  margin-top: 0;
}
ul > li     { color: #aaa; }
ul > li > * { color: black; }

.monospaced, code, pre {
  font-family: "Courier New", Courier, monospace;
  font-size: inherit;
  color: navy;
  padding: 0;
  margin: 0;
}
pre {
  white-space: pre-wrap;
}

#author {
  color: #527bbd;
  font-weight: bold;
  font-size: 1.1em;
}
#email {
}
#revnumber, #revdate, #revremark {
}

#footer {
  font-size: small;
  border-top: 2px solid silver;
  padding-top: 0.5em;
  margin-top: 4.0em;
}
#footer-text {
  float: left;
  padding-bottom: 0.5em;
}
#footer-badges {
  float: right;
  padding-bottom: 0.5em;
}

#preamble {
  margin-top: 1.5em;
  margin-bottom: 1.5em;
}
div.imageblock, div.exampleblock, div.verseblock,
div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
div.admonitionblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.admonitionblock {
  margin-top: 2.0em;
  margin-bottom: 2.0em;
  margin-right: 10%;
  color: #606060;
}

div.content { /* Block element content. */
  padding: 0;
}

/* Block element titles. */
div.title, caption.title {
  color: #527bbd;
  font-weight: bold;
  text-align: left;
  margin-top: 1.0em;
  margin-bottom: 0.5em;
}
div.title + * {
  margin-top: 0;
}

td div.title:first-child {
  margin-top: 0.0em;
}
div.content div.title:first-child {
  margin-top: 0.0em;
}
div.content + div.title {
  margin-top: 0.0em;
}

div.sidebarblock > div.content {
  background: #ffffee;
  border: 1px solid #dddddd;
  border-left: 4px solid #f0f0f0;
  padding: 0.5em;
}

div.listingblock > div.content {
  border: 1px solid #dddddd;
  border-left: 5px solid #f0f0f0;
  background: #f8f8f8;
  padding: 0.5em;
}

div.quoteblock, div.verseblock {
  padding-left: 1.0em;
  margin-left: 1.0em;
  margin-right: 10%;
  border-left: 5px solid #f0f0f0;
  color: #888;
}

div.quoteblock > div.attribution {
  padding-top: 0.5em;
  text-align: right;
}

div.verseblock > pre.content {
  font-family: inherit;
  font-size: inherit;
}
div.verseblock > div.attribution {
  padding-top: 0.75em;
  text-align: left;
}
/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
div.verseblock + div.attribution {
  text-align: left;
}

div.admonitionblock .icon {
  vertical-align: top;
  font-size: 1.1em;
  font-weight: bold;
  text-decoration: underline;
  color: #527bbd;
  padding-right: 0.5em;
}
div.admonitionblock td.content {
  padding-left: 0.5em;
  border-left: 3px solid #dddddd;
}

div.exampleblock > div.content {
  border-left: 3px solid #dddddd;
  padding-left: 0.5em;
}

div.imageblock div.content { padding-left: 0; }
span.image img { border-style: none; vertical-align: text-bottom; }
a.image:visited { color: white; }

dl {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
dt {
  margin-top: 0.5em;
  margin-bottom: 0;
  font-style: normal;
  color: navy;
}
dd > *:first-child {
  margin-top: 0.1em;
}

ul, ol {
    list-style-position: outside;
}
ol.arabic {
  list-style-type: decimal;
}
ol.loweralpha {
  list-style-type: lower-alpha;
}
ol.upperalpha {
  list-style-type: upper-alpha;
}
ol.lowerroman {
  list-style-type: lower-roman;
}
ol.upperroman {
  list-style-type: upper-roman;
}

div.compact ul, div.compact ol,
div.compact p, div.compact p,
div.compact div, div.compact div {
  margin-top: 0.1em;
  margin-bottom: 0.1em;
}

tfoot {
  font-weight: bold;
}
td > div.verse {
  white-space: pre;
}

div.hdlist {
  margin-top: 0.8em;
  margin-bottom: 0.8em;
}
div.hdlist tr {
  padding-bottom: 15px;
}
dt.hdlist1.strong, td.hdlist1.strong {
  font-weight: bold;
}
td.hdlist1 {
  vertical-align: top;
  font-style: normal;
  padding-right: 0.8em;
  color: navy;
}
td.hdlist2 {
  vertical-align: top;
}
div.hdlist.compact tr {
  margin: 0;
  padding-bottom: 0;
}

.comment {
  background: yellow;
}

.footnote, .footnoteref {
  font-size: 0.8em;
}

span.footnote, span.footnoteref {
  vertical-align: super;
}

#footnotes {
  margin: 20px 0 20px 0;
  padding: 7px 0 0 0;
}

#footnotes div.footnote {
  margin: 0 0 5px 0;
}

#footnotes hr {
  border: none;
  border-top: 1px solid silver;
  height: 1px;
  text-align: left;
  margin-left: 0;
  width: 20%;
  min-width: 100px;
}

div.colist td {
  padding-right: 0.5em;
  padding-bottom: 0.3em;
  vertical-align: top;
}
div.colist td img {
  margin-top: 0.3em;
}

@media print {
  #footer-badges { display: none; }
}

#toc {
  margin-bottom: 2.5em;
}

#toctitle {
  color: #527bbd;
  font-size: 1.1em;
  font-weight: bold;
  margin-top: 1.0em;
  margin-bottom: 0.1em;
}

div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
  margin-top: 0;
  margin-bottom: 0;
}
div.toclevel2 {
  margin-left: 2em;
  font-size: 0.9em;
}
div.toclevel3 {
  margin-left: 4em;
  font-size: 0.9em;
}
div.toclevel4 {
  margin-left: 6em;
  font-size: 0.9em;
}

span.aqua { color: aqua; }
span.black { color: black; }
span.blue { color: blue; }
span.fuchsia { color: fuchsia; }
span.gray { color: gray; }
span.green { color: green; }
span.lime { color: lime; }
span.maroon { color: maroon; }
span.navy { color: navy; }
span.olive { color: olive; }
span.purple { color: purple; }
span.red { color: red; }
span.silver { color: silver; }
span.teal { color: teal; }
span.white { color: white; }
span.yellow { color: yellow; }

span.aqua-background { background: aqua; }
span.black-background { background: black; }
span.blue-background { background: blue; }
span.fuchsia-background { background: fuchsia; }
span.gray-background { background: gray; }
span.green-background { background: green; }
span.lime-background { background: lime; }
span.maroon-background { background: maroon; }
span.navy-background { background: navy; }
span.olive-background { background: olive; }
span.purple-background { background: purple; }
span.red-background { background: red; }
span.silver-background { background: silver; }
span.teal-background { background: teal; }
span.white-background { background: white; }
span.yellow-background { background: yellow; }

span.big { font-size: 2em; }
span.small { font-size: 0.6em; }

span.underline { text-decoration: underline; }
span.overline { text-decoration: overline; }
span.line-through { text-decoration: line-through; }

div.unbreakable { page-break-inside: avoid; }


/*
 * xhtml11 specific
 *
 * */

div.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
div.tableblock > table {
  border: 3px solid #527bbd;
}
thead, p.table.header {
  font-weight: bold;
  color: #527bbd;
}
p.table {
  margin-top: 0;
}
/* Because the table frame attribute is overriden by CSS in most browsers. */
div.tableblock > table[frame="void"] {
  border-style: none;
}
div.tableblock > table[frame="hsides"] {
  border-left-style: none;
  border-right-style: none;
}
div.tableblock > table[frame="vsides"] {
  border-top-style: none;
  border-bottom-style: none;
}


/*
 * html5 specific
 *
 * */

table.tableblock {
  margin-top: 1.0em;
  margin-bottom: 1.5em;
}
thead, p.tableblock.header {
  font-weight: bold;
  color: #527bbd;
}
p.tableblock {
  margin-top: 0;
}
table.tableblock {
  border-width: 3px;
  border-spacing: 0px;
  border-style: solid;
  border-color: #527bbd;
  border-collapse: collapse;
}
th.tableblock, td.tableblock {
  border-width: 1px;
  padding: 4px;
  border-style: solid;
  border-color: #527bbd;
}

table.tableblock.frame-topbot {
  border-left-style: hidden;
  border-right-style: hidden;
}
table.tableblock.frame-sides {
  border-top-style: hidden;
  border-bottom-style: hidden;
}
table.tableblock.frame-none {
  border-style: hidden;
}

th.tableblock.halign-left, td.tableblock.halign-left {
  text-align: left;
}
th.tableblock.halign-center, td.tableblock.halign-center {
  text-align: center;
}
th.tableblock.halign-right, td.tableblock.halign-right {
  text-align: right;
}

th.tableblock.valign-top, td.tableblock.valign-top {
  vertical-align: top;
}
th.tableblock.valign-middle, td.tableblock.valign-middle {
  vertical-align: middle;
}
th.tableblock.valign-bottom, td.tableblock.valign-bottom {
  vertical-align: bottom;
}


/*
 * manpage specific
 *
 * */

body.manpage h1 {
  padding-top: 0.5em;
  padding-bottom: 0.5em;
  border-top: 2px solid silver;
  border-bottom: 2px solid silver;
}
body.manpage h2 {
  border-style: none;
}
body.manpage div.sectionbody {
  margin-left: 3em;
}

@media print {
  body.manpage div#toc { display: none; }
}


</style>
<script type="text/javascript">
/*<![CDATA[*/
var asciidoc = {  // Namespace.

/////////////////////////////////////////////////////////////////////
// Table Of Contents generator
/////////////////////////////////////////////////////////////////////

/* Author: Mihai Bazon, September 2002
 * http://students.infoiasi.ro/~mishoo
 *
 * Table Of Content generator
 * Version: 0.4
 *
 * Feel free to use this script under the terms of the GNU General Public
 * License, as long as you do not remove or alter this notice.
 */

 /* modified by Troy D. Hanson, September 2006. License: GPL */
 /* modified by Stuart Rackham, 2006, 2009. License: GPL */

// toclevels = 1..4.
toc: function (toclevels) {

  function getText(el) {
    var text = "";
    for (var i = el.firstChild; i != null; i = i.nextSibling) {
      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
        text += i.data;
      else if (i.firstChild != null)
        text += getText(i);
    }
    return text;
  }

  function TocEntry(el, text, toclevel) {
    this.element = el;
    this.text = text;
    this.toclevel = toclevel;
  }

  function tocEntries(el, toclevels) {
    var result = new Array;
    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
    // Function that scans the DOM tree for header elements (the DOM2
    // nodeIterator API would be a better technique but not supported by all
    // browsers).
    var iterate = function (el) {
      for (var i = el.firstChild; i != null; i = i.nextSibling) {
        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          var mo = re.exec(i.tagName);
          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          }
          iterate(i);
        }
      }
    }
    iterate(el);
    return result;
  }

  var toc = document.getElementById("toc");
  if (!toc) {
    return;
  }

  // Delete existing TOC entries in case we're reloading the TOC.
  var tocEntriesToRemove = [];
  var i;
  for (i = 0; i < toc.childNodes.length; i++) {
    var entry = toc.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div'
     && entry.getAttribute("class")
     && entry.getAttribute("class").match(/^toclevel/))
      tocEntriesToRemove.push(entry);
  }
  for (i = 0; i < tocEntriesToRemove.length; i++) {
    toc.removeChild(tocEntriesToRemove[i]);
  }

  // Rebuild TOC entries.
  var entries = tocEntries(document.getElementById("content"), toclevels);
  for (var i = 0; i < entries.length; ++i) {
    var entry = entries[i];
    if (entry.element.id == "")
      entry.element.id = "_toc_" + i;
    var a = document.createElement("a");
    a.href = "#" + entry.element.id;
    a.appendChild(document.createTextNode(entry.text));
    var div = document.createElement("div");
    div.appendChild(a);
    div.className = "toclevel" + entry.toclevel;
    toc.appendChild(div);
  }
  if (entries.length == 0)
    toc.parentNode.removeChild(toc);
},


/////////////////////////////////////////////////////////////////////
// Footnotes generator
/////////////////////////////////////////////////////////////////////

/* Based on footnote generation code from:
 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
 */

footnotes: function () {
  // Delete existing footnote entries in case we're reloading the footnodes.
  var i;
  var noteholder = document.getElementById("footnotes");
  if (!noteholder) {
    return;
  }
  var entriesToRemove = [];
  for (i = 0; i < noteholder.childNodes.length; i++) {
    var entry = noteholder.childNodes[i];
    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
      entriesToRemove.push(entry);
  }
  for (i = 0; i < entriesToRemove.length; i++) {
    noteholder.removeChild(entriesToRemove[i]);
  }

  // Rebuild footnote entries.
  var cont = document.getElementById("content");
  var spans = cont.getElementsByTagName("span");
  var refs = {};
  var n = 0;
  for (i=0; i<spans.length; i++) {
    if (spans[i].className == "footnote") {
      n++;
      var note = spans[i].getAttribute("data-note");
      if (!note) {
        // Use [\s\S] in place of . so multi-line matches work.
        // Because JavaScript has no s (dotall) regex flag.
        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
        spans[i].innerHTML =
          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
        spans[i].setAttribute("data-note", note);
      }
      noteholder.innerHTML +=
        "<div class='footnote' id='_footnote_" + n + "'>" +
        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
        n + "</a>. " + note + "</div>";
      var id =spans[i].getAttribute("id");
      if (id != null) refs["#"+id] = n;
    }
  }
  if (n == 0)
    noteholder.parentNode.removeChild(noteholder);
  else {
    // Process footnoterefs.
    for (i=0; i<spans.length; i++) {
      if (spans[i].className == "footnoteref") {
        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
        href = href.match(/#.*/)[0];  // Because IE return full URL.
        n = refs[href];
        spans[i].innerHTML =
          "[<a href='#_footnote_" + n +
          "' title='View footnote' class='footnote'>" + n + "</a>]";
      }
    }
  }
},

install: function(toclevels) {
  var timerId;

  function reinstall() {
    asciidoc.footnotes();
    if (toclevels) {
      asciidoc.toc(toclevels);
    }
  }

  function reinstallAndRemoveTimer() {
    clearInterval(timerId);
    reinstall();
  }

  timerId = setInterval(reinstall, 500);
  if (document.addEventListener)
    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
  else
    window.onload = reinstallAndRemoveTimer;
}

}
asciidoc.install();
/*]]>*/
</script>
</head>
<body class="manpage">
<div id="header">
<h1>
git-reset(1) Manual Page
</h1>
<h2>NAME</h2>
<div class="sectionbody">
<p>git-reset -
   Reset current HEAD to the specified state
</p>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_synopsis">SYNOPSIS</h2>
<div class="sectionbody">
<div class="verseblock">
<pre class="content"><em>git reset</em> [-q] [&lt;tree-ish&gt;] [--] &lt;paths&gt;&#8230;
<em>git reset</em> (--patch | -p) [&lt;tree-ish&gt;] [--] [&lt;paths&gt;&#8230;]
<em>git reset</em> [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [&lt;commit&gt;]</pre>
<div class="attribution">
</div></div>
</div>
</div>
<div class="sect1">
<h2 id="_description">DESCRIPTION</h2>
<div class="sectionbody">
<div class="paragraph"><p>In the first and second form, copy entries from &lt;tree-ish&gt; to the index.
In the third form, set the current branch head (HEAD) to &lt;commit&gt;, optionally
modifying index and working tree to match.  The &lt;tree-ish&gt;/&lt;commit&gt; defaults
to HEAD in all forms.</p></div>
<div class="dlist"><dl>
<dt class="hdlist1">
<em>git reset</em> [-q] [&lt;tree-ish&gt;] [--] &lt;paths&gt;&#8230;
</dt>
<dd>
<p>
        This form resets the index entries for all &lt;paths&gt; to their
        state at &lt;tree-ish&gt;.  (It does not affect the working tree or
        the current branch.)
</p>
<div class="paragraph"><p>This means that <code>git reset &lt;paths&gt;</code> is the opposite of <code>git add
&lt;paths&gt;</code>.</p></div>
<div class="paragraph"><p>After running <code>git reset &lt;paths&gt;</code> to update the index entry, you can
use <a href="git-checkout.html">git-checkout(1)</a> to check the contents out of the index to
the working tree.
Alternatively, using <a href="git-checkout.html">git-checkout(1)</a> and specifying a commit, you
can copy the contents of a path out of a commit to the index and to the
working tree in one go.</p></div>
</dd>
<dt class="hdlist1">
<em>git reset</em> (--patch | -p) [&lt;tree-ish&gt;] [--] [&lt;paths&gt;&#8230;]
</dt>
<dd>
<p>
        Interactively select hunks in the difference between the index
        and &lt;tree-ish&gt; (defaults to HEAD).  The chosen hunks are applied
        in reverse to the index.
</p>
<div class="paragraph"><p>This means that <code>git reset -p</code> is the opposite of <code>git add -p</code>, i.e.
you can use it to selectively reset hunks. See the &#8220;Interactive Mode&#8221;
section of <a href="git-add.html">git-add(1)</a> to learn how to operate the <code>--patch</code> mode.</p></div>
</dd>
<dt class="hdlist1">
<em>git reset</em> [&lt;mode&gt;] [&lt;commit&gt;]
</dt>
<dd>
<p>
        This form resets the current branch head to &lt;commit&gt; and
        possibly updates the index (resetting it to the tree of &lt;commit&gt;) and
        the working tree depending on &lt;mode&gt;. If &lt;mode&gt; is omitted,
        defaults to "--mixed". The &lt;mode&gt; must be one of the following:
</p>
<div class="openblock">
<div class="content">
<div class="dlist"><dl>
<dt class="hdlist1">
--soft
</dt>
<dd>
<p>
        Does not touch the index file or the working tree at all (but
        resets the head to &lt;commit&gt;, just like all modes do). This leaves
        all your changed files "Changes to be committed", as <em>git status</em>
        would put it.
</p>
</dd>
<dt class="hdlist1">
--mixed
</dt>
<dd>
<p>
        Resets the index but not the working tree (i.e., the changed files
        are preserved but not marked for commit) and reports what has not
        been updated. This is the default action.
</p>
<div class="paragraph"><p>If <code>-N</code> is specified, removed paths are marked as intent-to-add (see
<a href="git-add.html">git-add(1)</a>).</p></div>
</dd>
<dt class="hdlist1">
--hard
</dt>
<dd>
<p>
        Resets the index and working tree. Any changes to tracked files in the
        working tree since &lt;commit&gt; are discarded.
</p>
</dd>
<dt class="hdlist1">
--merge
</dt>
<dd>
<p>
        Resets the index and updates the files in the working tree that are
        different between &lt;commit&gt; and HEAD, but keeps those which are
        different between the index and working tree (i.e. which have changes
        which have not been added).
        If a file that is different between &lt;commit&gt; and the index has unstaged
        changes, reset is aborted.
</p>
<div class="paragraph"><p>In other words, --merge does something like a <em>git read-tree -u -m &lt;commit&gt;</em>,
but carries forward unmerged index entries.</p></div>
</dd>
<dt class="hdlist1">
--keep
</dt>
<dd>
<p>
        Resets index entries and updates files in the working tree that are
        different between &lt;commit&gt; and HEAD.
        If a file that is different between &lt;commit&gt; and HEAD has local changes,
        reset is aborted.
</p>
</dd>
</dl></div>
</div></div>
</dd>
</dl></div>
<div class="paragraph"><p>If you want to undo a commit other than the latest on a branch,
<a href="git-revert.html">git-revert(1)</a> is your friend.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_options">OPTIONS</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
-q
</dt>
<dt class="hdlist1">
--quiet
</dt>
<dt class="hdlist1">
--no-quiet
</dt>
<dd>
<p>
        Be quiet, only report errors. The default behavior is set by the
        <code>reset.quiet</code> config option. <code>--quiet</code> and <code>--no-quiet</code> will
        override the default behavior.
</p>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_examples">EXAMPLES</h2>
<div class="sectionbody">
<div class="dlist"><dl>
<dt class="hdlist1">
Undo add
</dt>
<dd>
<div class="listingblock">
<div class="content">
<pre><code>$ edit                                     <b>&lt;1&gt;</b>
$ git add frotz.c filfre.c
$ mailx                                    <b>&lt;2&gt;</b>
$ git reset                                <b>&lt;3&gt;</b>
$ git pull git://info.example.com/ nitfol  <b>&lt;4&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
You are happily working on something, and find the changes
in these files are in good order.  You do not want to see them
when you run "git diff", because you plan to work on other files
and changes with these files are distracting.
</p>
</li>
<li>
<p>
Somebody asks you to pull, and the changes sound worthy of merging.
</p>
</li>
<li>
<p>
However, you already dirtied the index (i.e. your index does
not match the HEAD commit).  But you know the pull you are going
to make does not affect frotz.c or filfre.c, so you revert the
index changes for these two files.  Your changes in working tree
remain there.
</p>
</li>
<li>
<p>
Then you can pull and merge, leaving frotz.c and filfre.c
changes still in the working tree.
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Undo a commit and redo
</dt>
<dd>
<div class="listingblock">
<div class="content">
<pre><code>$ git commit ...
$ git reset --soft HEAD^      <b>&lt;1&gt;</b>
$ edit                        <b>&lt;2&gt;</b>
$ git commit -a -c ORIG_HEAD  <b>&lt;3&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
This is most often done when you remembered what you
just committed is incomplete, or you misspelled your commit
message, or both.  Leaves working tree as it was before "reset".
</p>
</li>
<li>
<p>
Make corrections to working tree files.
</p>
</li>
<li>
<p>
"reset" copies the old head to .git/ORIG_HEAD; redo the
commit by starting with its log message.  If you do not need to
edit the message further, you can give -C option instead.
</p>
<div class="paragraph"><p>See also the --amend option to <a href="git-commit.html">git-commit(1)</a>.</p></div>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Undo a commit, making it a topic branch
</dt>
<dd>
<div class="listingblock">
<div class="content">
<pre><code>$ git branch topic/wip     <b>&lt;1&gt;</b>
$ git reset --hard HEAD~3  <b>&lt;2&gt;</b>
$ git checkout topic/wip   <b>&lt;3&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
You have made some commits, but realize they were premature
to be in the "master" branch.  You want to continue polishing
them in a topic branch, so create "topic/wip" branch off of the
current HEAD.
</p>
</li>
<li>
<p>
Rewind the master branch to get rid of those three commits.
</p>
</li>
<li>
<p>
Switch to "topic/wip" branch and keep working.
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Undo commits permanently
</dt>
<dd>
<div class="listingblock">
<div class="content">
<pre><code>$ git commit ...
$ git reset --hard HEAD~3   <b>&lt;1&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
The last three commits (HEAD, HEAD^, and HEAD~2) were bad
and you do not want to ever see them again.  Do <strong>not</strong> do this if
you have already given these commits to somebody else.  (See the
"RECOVERING FROM UPSTREAM REBASE" section in <a href="git-rebase.html">git-rebase(1)</a> for
the implications of doing so.)
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Undo a merge or pull
</dt>
<dd>
<div class="listingblock">
<div class="content">
<pre><code>$ git pull                         <b>&lt;1&gt;</b>
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 <b>&lt;2&gt;</b>
$ git pull . topic/branch          <b>&lt;3&gt;</b>
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       <b>&lt;4&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
Try to update from the upstream resulted in a lot of
conflicts; you were not ready to spend a lot of time merging
right now, so you decide to do that later.
</p>
</li>
<li>
<p>
"pull" has not made merge commit, so "git reset --hard"
which is a synonym for "git reset --hard HEAD" clears the mess
from the index file and the working tree.
</p>
</li>
<li>
<p>
Merge a topic branch into the current branch, which resulted
in a fast-forward.
</p>
</li>
<li>
<p>
But you decided that the topic branch is not ready for public
consumption yet.  "pull" or "merge" always leaves the original
tip of the current branch in ORIG_HEAD, so resetting hard to it
brings your index file and the working tree back to that state,
and resets the tip of the branch to that commit.
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Undo a merge or pull inside a dirty working tree
</dt>
<dd>
<div class="listingblock">
<div class="content">
<pre><code>$ git pull                         <b>&lt;1&gt;</b>
Auto-merging nitfol
Merge made by recursive.
 nitfol                |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      <b>&lt;2&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
Even if you may have local modifications in your
working tree, you can safely say "git pull" when you know
that the change in the other branch does not overlap with
them.
</p>
</li>
<li>
<p>
After inspecting the result of the merge, you may find
that the change in the other branch is unsatisfactory.  Running
"git reset --hard ORIG_HEAD" will let you go back to where you
were, but it will discard your local changes, which you do not
want.  "git reset --merge" keeps your local changes.
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Interrupted workflow
</dt>
<dd>
<div class="paragraph"><p>Suppose you are interrupted by an urgent fix request while you
are in the middle of a large change.  The files in your
working tree are not in any shape to be committed yet, but you
need to get to the other branch for a quick bugfix.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ git checkout feature ;# you were working in "feature" branch and
$ work work work       ;# got interrupted
$ git commit -a -m "snapshot WIP"                 <b>&lt;1&gt;</b>
$ git checkout master
$ fix fix fix
$ git commit ;# commit with real log
$ git checkout feature
$ git reset --soft HEAD^ ;# go back to WIP state  <b>&lt;2&gt;</b>
$ git reset                                       <b>&lt;3&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
This commit will get blown away so a throw-away log message is OK.
</p>
</li>
<li>
<p>
This removes the <em>WIP</em> commit from the commit history, and sets
    your working tree to the state just before you made that snapshot.
</p>
</li>
<li>
<p>
At this point the index file still has all the WIP changes you
    committed as <em>snapshot WIP</em>.  This updates the index to show your
    WIP files as uncommitted.
</p>
<div class="paragraph"><p>See also <a href="git-stash.html">git-stash(1)</a>.</p></div>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Reset a single file in the index
</dt>
<dd>
<div class="paragraph"><p>Suppose you have added a file to your index, but later decide you do not
want to add it to your commit. You can remove the file from the index
while keeping your changes with git reset.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ git reset -- frotz.c                      <b>&lt;1&gt;</b>
$ git commit -m "Commit files in index"     <b>&lt;2&gt;</b>
$ git add frotz.c                           <b>&lt;3&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
This removes the file from the index while keeping it in the working
    directory.
</p>
</li>
<li>
<p>
This commits all other changes in the index.
</p>
</li>
<li>
<p>
Adds the file to the index again.
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Keep changes in working tree while discarding some previous commits
</dt>
<dd>
<div class="paragraph"><p>Suppose you are working on something and you commit it, and then you
continue working a bit more, but now you think that what you have in
your working tree should be in another branch that has nothing to do
with what you committed previously. You can start a new branch and
reset it while keeping the changes in your working tree.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ git tag start
$ git checkout -b branch1
$ edit
$ git commit ...                            <b>&lt;1&gt;</b>
$ edit
$ git checkout -b branch2                   <b>&lt;2&gt;</b>
$ git reset --keep start                    <b>&lt;3&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
This commits your first edits in branch1.
</p>
</li>
<li>
<p>
In the ideal world, you could have realized that the earlier
    commit did not belong to the new topic when you created and switched
    to branch2 (i.e. "git checkout -b branch2 start"), but nobody is
    perfect.
</p>
</li>
<li>
<p>
But you can use "reset --keep" to remove the unwanted commit after
    you switched to "branch2".
</p>
</li>
</ol></div>
</dd>
<dt class="hdlist1">
Split a commit apart into a sequence of commits
</dt>
<dd>
<div class="paragraph"><p>Suppose that you have created lots of logically separate changes and committed
them together. Then, later you decide that it might be better to have each
logical chunk associated with its own commit. You can use git reset to rewind
history without changing the contents of your local files, and then successively
use <code>git add -p</code> to interactively select which hunks to include into each commit,
using <code>git commit -c</code> to pre-populate the commit message.</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ git reset -N HEAD^                        <b>&lt;1&gt;</b>
$ git add -p                                <b>&lt;2&gt;</b>
$ git diff --cached                         <b>&lt;3&gt;</b>
$ git commit -c HEAD@{1}                    <b>&lt;4&gt;</b>
...                                         <b>&lt;5&gt;</b>
$ git add ...                               <b>&lt;6&gt;</b>
$ git diff --cached                         <b>&lt;7&gt;</b>
$ git commit ...                            <b>&lt;8&gt;</b></code></pre>
</div></div>
<div class="colist arabic"><ol>
<li>
<p>
First, reset the history back one commit so that we remove the original
    commit, but leave the working tree with all the changes. The -N ensures
    that any new files added with HEAD are still marked so that git add -p
    will find them.
</p>
</li>
<li>
<p>
Next, we interactively select diff hunks to add using the git add -p
    facility. This will ask you about each diff hunk in sequence and you can
    use simple commands such as "yes, include this", "No don&#8217;t include this"
    or even the very powerful "edit" facility.
</p>
</li>
<li>
<p>
Once satisfied with the hunks you want to include, you should verify what
    has been prepared for the first commit by using git diff --cached. This
    shows all the changes that have been moved into the index and are about
    to be committed.
</p>
</li>
<li>
<p>
Next, commit the changes stored in the index. The -c option specifies to
    pre-populate the commit message from the original message that you started
    is a special notation for the commit that HEAD used to be at prior to the
    original reset commit (1 change ago). See <a href="git-reflog.html">git-reflog(1)</a> for more
    details. You may also use any other valid commit reference.
</p>
</li>
<li>
<p>
You can repeat steps 2-4 multiple times to break the original code into
    any number of commits.
</p>
</li>
<li>
<p>
Now you&#8217;ve split out many of the changes into their own commits, and might
    no longer use the patch mode of git add, in order to select all remaining
    uncommitted changes.
</p>
</li>
<li>
<p>
Once again, check to verify that you&#8217;ve included what you want to. You may
    also wish to verify that git diff doesn&#8217;t show any remaining changes to be
    committed later.
</p>
</li>
<li>
<p>
And finally create the final commit.
</p>
</li>
</ol></div>
</dd>
</dl></div>
</div>
</div>
<div class="sect1">
<h2 id="_discussion">DISCUSSION</h2>
<div class="sectionbody">
<div class="paragraph"><p>The tables below show what happens when running:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>git reset --option target</code></pre>
</div></div>
<div class="paragraph"><p>to reset the HEAD to another commit (<code>target</code>) with the different
reset options depending on the state of the files.</p></div>
<div class="paragraph"><p>In these tables, A, B, C and D are some different states of a
file. For example, the first line of the first table means that if a
file is in state A in the working tree, in state B in the index, in
state C in HEAD and in state D in the target, then "git reset --soft
target" will leave the file in the working tree in state A and in the
index in state B.  It resets (i.e. moves) the HEAD (i.e. the tip of
the current branch, if you are on one) to "target" (which has the file
in state D).</p></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 A       B     C    D     --soft   A       B     D
                          --mixed  A       D     D
                          --hard   D       D     D
                          --merge (disallowed)
                          --keep  (disallowed)</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 A       B     C    C     --soft   A       B     C
                          --mixed  A       C     C
                          --hard   C       C     C
                          --merge (disallowed)
                          --keep   A       C     C</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 B       B     C    D     --soft   B       B     D
                          --mixed  B       D     D
                          --hard   D       D     D
                          --merge  D       D     D
                          --keep  (disallowed)</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 B       B     C    C     --soft   B       B     C
                          --mixed  B       C     C
                          --hard   C       C     C
                          --merge  C       C     C
                          --keep   B       C     C</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 B       C     C    D     --soft   B       C     D
                          --mixed  B       D     D
                          --hard   D       D     D
                          --merge (disallowed)
                          --keep  (disallowed)</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 B       C     C    C     --soft   B       C     C
                          --mixed  B       C     C
                          --hard   C       C     C
                          --merge  B       C     C
                          --keep   B       C     C</code></pre>
</div></div>
<div class="paragraph"><p>"reset --merge" is meant to be used when resetting out of a conflicted
merge. Any mergy operation guarantees that the working tree file that is
involved in the merge does not have local change wrt the index before
it starts, and that it writes the result out to the working tree. So if
we see some difference between the index and the target and also
between the index and the working tree, then it means that we are not
resetting out from a state that a mergy operation left after failing
with a conflict. That is why we disallow --merge option in this case.</p></div>
<div class="paragraph"><p>"reset --keep" is meant to be used when removing some of the last
commits in the current branch while keeping changes in the working
tree. If there could be conflicts between the changes in the commit we
want to remove and the changes in the working tree we want to keep,
the reset is disallowed. That&#8217;s why it is disallowed if there are both
changes between the working tree and HEAD, and between HEAD and the
target. To be safe, it is also disallowed when there are unmerged
entries.</p></div>
<div class="paragraph"><p>The following tables show what happens when there are unmerged
entries:</p></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 X       U     A    B     --soft  (disallowed)
                          --mixed  X       B     B
                          --hard   B       B     B
                          --merge  B       B     B
                          --keep  (disallowed)</code></pre>
</div></div>
<div class="literalblock">
<div class="content">
<pre><code>working index HEAD target         working index HEAD
----------------------------------------------------
 X       U     A    A     --soft  (disallowed)
                          --mixed  X       A     A
                          --hard   A       A     A
                          --merge  A       A     A
                          --keep  (disallowed)</code></pre>
</div></div>
<div class="paragraph"><p>X means any state and U means an unmerged index.</p></div>
</div>
</div>
<div class="sect1">
<h2 id="_git">GIT</h2>
<div class="sectionbody">
<div class="paragraph"><p>Part of the <a href="git.html">git(1)</a> suite</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated
 2018-11-13 23:05:48 JST
</div>
</div>
</body>
</html>
