.\"Generated by db2man.xsl. Don't modify this, modify the source. .de Sh \" Subsection .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Ip \" List item .br .ie \\n(.$>=3 .ne \\$3 .el .ne 3 .IP "\\$1" \\$2 .. .TH "GIT-RESET" 1 "" "" "" .SH NAME git-reset \- Reset current HEAD to the specified state. .SH "SYNOPSIS" git\-reset [\-\-mixed | \-\-soft | \-\-hard] [] .SH "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, \fBgit\-revert\fR(1) is your friend\&. .SH "OPTIONS" .TP \-\-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\&. .TP \-\-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 \fBgit\-status\fR(1) would put it\&. .TP \-\-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 are lost\&. .TP Commit to make the current HEAD\&. .SS "Examples" .TP Undo a commit and redo .IP $ git commit \&.\&.\&. $ git reset \-\-soft HEAD^ $ edit $ git commit \-a \-c ORIG_HEAD 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"\&. make corrections to working tree files\&. "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\&. .TP Undo commits permanently .IP $ git commit \&.\&.\&. $ git reset \-\-hard HEAD~3 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\&. .TP Undo a commit, making it a topic branch .IP $ git branch topic/wip $ git reset \-\-hard HEAD~3 $ git checkout topic/wip 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\&. Rewind the master branch to get rid of those three commits\&. Switch to "topic/wip" branch and keep working\&. .TP Undo update\-index .IP $ edit $ git\-update\-index frotz\&.c filfre\&.c $ mailx $ git reset $ git pull git://info\&.example\&.com/ nitfol 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\&. somebody asks you to pull, and the changes sounds worthy of merging\&. 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\&. then you can pull and merge, leaving frotz\&.c and filfre\&.c changes still in the working tree\&. .TP Undo a merge or pull .IP $ git pull 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 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\&. "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 Updating from 41223\&.\&.\&. to 13134\&.\&.\&. Fast forward $ git reset \-\-hard ORIG_HEAD merge a topic branch into the current branch, which resulted in a fast forward\&. 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\&. .TP 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\&. .IP $ git checkout feature ;# you were working in "feature" branch and $ work work work ;# got interrupted $ git commit \-a \-m 'snapshot WIP' $ git checkout master $ fix fix fix $ git commit ;# commit with real log $ git checkout feature $ git reset \-\-soft HEAD^ ;# go back to WIP state $ git reset This commit will get blown away so a throw\-away log message is OK\&. This removes the 'WIP' commit from the commit history, and sets your working tree to the state just before you made that snapshot\&. After , the index file still has all the WIP changes you committed in \&. This sets it to the last commit you were basing the WIP changes on\&. .SH "AUTHOR" Written by Junio C Hamano and Linus Torvalds .SH "DOCUMENTATION" Documentation by Junio C Hamano and the git\-list \&. .SH "GIT" Part of the \fBgit\fR(7) suite