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

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

SYNOPSIS
--------
'git-reset' [--mixed | --soft | --hard] [<commit-ish>]

DESCRIPTION
-----------
Sets the current head to the specified commit and optionally resets the
index and working tree to match.

This command is useful if you notice some small error in a recent
commit (or set of commits) and want to redo that part without showing
the undo in the history.

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

OPTIONS
-------
--mixed::
	Resets the index but not the working tree (ie, the changed files
	are preserved but not marked for commit) and reports what has not
	been updated. This is the default action.

--soft::
	Does not touch the index file nor the working tree at all, but
	requires them to be in a good order. This leaves all your changed
	files "Updated but not checked in", as gitlink:git-status[1] would
	put it.

--hard::
	Matches the working tree and index to that of the tree being
	switched to. Any changes to tracked files in the working tree
	since <commit-ish> are lost.

<commit-ish>::
	Commit to make the current HEAD.

Examples
~~~~~~~~

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

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

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 update-index::
+
------------
$ edit <1>
$ git-update-index 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 sounds 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 nor 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 merge or pull::
+
------------
$ git pull <1>
Trying really trivial in-index merge...
fatal: Merge requires file-level merging
Nope.
...
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed/prevented; fix up by hand
$ git reset --hard <2>

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

$ git pull . topic/branch <3>
Updating from 41223... to 13134...
Fast forward
$ git reset --hard ORIG_HEAD <4>

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

Author
------
Written by Junio C Hamano <junkio@cox.net> and Linus Torvalds <torvalds@osdl.org>

Documentation
--------------
Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.

GIT
---
Part of the gitlink:git[7] suite

