git-reset(1)
============

NAME
----
git-reset - Reset current HEAD to the specified state

SYNOPSIS
--------
[verse]
'git reset' [-q] [<tree-ish>] [--] <paths>...
'git reset' (--patch | -p) [<tree-ish>] [--] [<paths>...]
'git reset' [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

DESCRIPTION
-----------
In the first and second form, copy entries from <tree-ish> to the index.
In the third form, set the current branch head (HEAD) to <commit>, optionally
modifying index and working tree to match.  The <tree-ish>/<commit> defaults
to HEAD in all forms.

'git reset' [-q] [<tree-ish>] [--] <paths>...::
	This form resets the index entries for all <paths> to their
	state at <tree-ish>.  (It does not affect the working tree or
	the current branch.)
+
This means that `git reset <paths>` is the opposite of `git add
<paths>`.
+
After running `git reset <paths>` to update the index entry, you can
use linkgit:git-checkout[1] to check the contents out of the index to
the working tree.
Alternatively, using linkgit:git-checkout[1] 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.

'git reset' (--patch | -p) [<tree-ish>] [--] [<paths>...]::
	Interactively select hunks in the difference between the index
	and <tree-ish> (defaults to HEAD).  The chosen hunks are applied
	in reverse to the index.
+
This means that `git reset -p` is the opposite of `git add -p`, i.e.
you can use it to selectively reset hunks. See the ``Interactive Mode''
section of linkgit:git-add[1] to learn how to operate the `--patch` mode.

'git reset' [<mode>] [<commit>]::
	This form resets the current branch head to <commit> and
	possibly updates the index (resetting it to the tree of <commit>) and
	the working tree depending on <mode>. If <mode> is omitted,
	defaults to "--mixed". The <mode> must be one of the following:
+
--
--soft::
	Does not touch the index file or the working tree at all (but
	resets the head to <commit>, just like all modes do). This leaves
	all your changed files "Changes to be committed", as 'git status'
	would put it.

--mixed::
	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.
+
If `-N` is specified, removed paths are marked as intent-to-add (see
linkgit:git-add[1]).

--hard::
	Resets the index and working tree. Any changes to tracked files in the
	working tree since <commit> are discarded.

--merge::
	Resets the index and updates the files in the working tree that are
	different between <commit> 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 <commit> and the index has unstaged
	changes, reset is aborted.
+
In other words, --merge does something like a 'git read-tree -u -m <commit>',
but carries forward unmerged index entries.

--keep::
	Resets index entries and updates files in the working tree that are
	different between <commit> and HEAD.
	If a file that is different between <commit> and HEAD has local changes,
	reset is aborted.
--

If you want to undo a commit other than the latest on a branch,
linkgit:git-revert[1] is your friend.


OPTIONS
-------

-q::
--quiet::
	Be quiet, only report errors.


EXAMPLES
--------

Undo add::
+
------------
$ edit                                     <1>
$ git add frotz.c filfre.c
$ mailx                                    <2>
$ git reset                                <3>
$ git pull git://info.example.com/ nitfol  <4>
------------
+
<1> 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.
<2> Somebody asks you to pull, and the changes sound worthy of merging.
<3> 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.
<4> Then you can pull and merge, leaving frotz.c and filfre.c
changes still in the working tree.

Undo a commit and redo::
+
------------
$ git commit ...
$ git reset --soft HEAD^      <1>
$ edit                        <2>
$ git commit -a -c ORIG_HEAD  <3>
------------
+
<1> 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".
<2> Make corrections to working tree files.
<3> "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.
+
See also the --amend option to linkgit:git-commit[1].

Undo a commit, making it a topic branch::
+
------------
$ git branch topic/wip     <1>
$ git reset --hard HEAD~3  <2>
$ git checkout topic/wip   <3>
------------
+
<1> 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.
<2> Rewind the master branch to get rid of those three commits.
<3> Switch to "topic/wip" branch and keep working.

Undo commits permanently::
+
------------
$ git commit ...
$ git reset --hard HEAD~3   <1>
------------
+
<1> The last three commits (HEAD, HEAD^, and HEAD~2) were bad
and you do not want to ever see them again.  Do *not* do this if
you have already given these commits to somebody else.  (See the
"RECOVERING FROM UPSTREAM REBASE" section in linkgit:git-rebase[1] for
the implications of doing so.)

Undo a merge or pull::
+
------------
$ git pull                         <1>
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 <2>
$ git pull . topic/branch          <3>
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       <4>
------------
+
<1> 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.
<2> "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.
<3> Merge a topic branch into the current branch, which resulted
in a fast-forward.
<4> 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.

Undo a merge or pull inside a dirty working tree::
+
------------
$ git pull                         <1>
Auto-merging nitfol
Merge made by recursive.
 nitfol                |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      <2>
------------
+
<1> 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.
<2> 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.


Interrupted workflow::
+
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.
+
------------
$ git checkout feature ;# you were working in "feature" branch and
$ work work work       ;# got interrupted
$ git commit -a -m "snapshot WIP"                 <1>
$ git checkout master
$ fix fix fix
$ git commit ;# commit with real log
$ git checkout feature
$ git reset --soft HEAD^ ;# go back to WIP state  <2>
$ git reset                                       <3>
------------
+
<1> This commit will get blown away so a throw-away log message is OK.
<2> This removes the 'WIP' commit from the commit history, and sets
    your working tree to the state just before you made that snapshot.
<3> At this point the index file still has all the WIP changes you
    committed as 'snapshot WIP'.  This updates the index to show your
    WIP files as uncommitted.
+
See also linkgit:git-stash[1].

Reset a single file in the index::
+
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.
+
------------
$ git reset -- frotz.c                      <1>
$ git commit -m "Commit files in index"     <2>
$ git add frotz.c                           <3>
------------
+
<1> This removes the file from the index while keeping it in the working
    directory.
<2> This commits all other changes in the index.
<3> Adds the file to the index again.

Keep changes in working tree while discarding some previous commits::
+
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.
+
------------
$ git tag start
$ git checkout -b branch1
$ edit
$ git commit ...                            <1>
$ edit
$ git checkout -b branch2                   <2>
$ git reset --keep start                    <3>
------------
+
<1> This commits your first edits in branch1.
<2> 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.
<3> But you can use "reset --keep" to remove the unwanted commit after
    you switched to "branch2".

Split a commit apart into a sequence of commits::
+
Suppose that you have created lots of logically separate changes and commited
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 `git add -p` to interactively select which hunks to include into each commit,
using `git commit -c` to pre-populate the commit message.
+
------------
$ git reset -N HEAD^                        <1>
$ git add -p                                <2>
$ git diff --cached                         <3>
$ git commit -c HEAD@{1}                    <4>
...                                         <5>
$ git add ...                               <6>
$ git diff --cached                         <7>
$ git commit ...                            <8>
------------
+
<1> 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.
<2> 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't include this"
    or even the very powerful "edit" facility.
<3> 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.
<4> 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
    with in the first commit. This is helpful to avoid retyping it. The HEAD@{1}
    is a special notation for the commit that HEAD used to be at prior to the
    original reset commit (1 change ago). See linkgit:git-reflog[1] for more
    details. You may also use any other valid commit reference.
<5> You can repeat steps 2-4 multiple times to break the original code into
    any number of commits.
<6> Now you'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.
<7> Once again, check to verify that you've included what you want to. You may
    also wish to verify that git diff doesn't show any remaining changes to be
    committed later.
<8> And finally create the final commit.


DISCUSSION
----------

The tables below show what happens when running:

----------
git reset --option target
----------

to reset the HEAD to another commit (`target`) with the different
reset options depending on the state of the files.

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).

      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)

      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

      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)

      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

      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)

      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

"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.

"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'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.

The following tables show what happens when there are unmerged
entries:

      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)

      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)

X means any state and U means an unmerged index.

GIT
---
Part of the linkgit:git[1] suite
