.\"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" \fIgit\-reset\fR [\-\-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 (i\&.e\&., 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\&. .SH "EXAMPLES" .TP Undo a commit and redo .nf $ git commit \&.\&.\&. $ git reset \-\-soft HEAD^ \fB(1)\fR $ edit \fB(2)\fR $ git commit \-a \-c ORIG_HEAD \fB(3)\fR .fi .sp \fB1. \fRThis 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"\&. .br \fB2. \fRmake corrections to working tree files\&. .br \fB3. \fR"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\&. .br .TP Undo commits permanently .nf $ git commit \&.\&.\&. $ git reset \-\-hard HEAD~3 \fB(1)\fR .fi .sp \fB1. \fRThe last three commits (HEAD, HEAD^, and HEAD~2) were bad and you do not want to ever see them again\&. Do \fInot\fR do this if you have already given these commits to somebody else\&. .br .TP Undo a commit, making it a topic branch .nf $ git branch topic/wip \fB(1)\fR $ git reset \-\-hard HEAD~3 \fB(2)\fR $ git checkout topic/wip \fB(3)\fR .fi .sp \fB1. \fRYou 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\&. .br \fB2. \fRRewind the master branch to get rid of those three commits\&. .br \fB3. \fRSwitch to "topic/wip" branch and keep working\&. .br .TP Undo update\-index .nf $ edit \fB(1)\fR $ git\-update\-index frotz\&.c filfre\&.c $ mailx \fB(2)\fR $ git reset \fB(3)\fR $ git pull git://info\&.example\&.com/ nitfol \fB(4)\fR .fi .sp \fB1. \fRyou 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\&. .br \fB2. \fRsomebody asks you to pull, and the changes sounds worthy of merging\&. .br \fB3. \fRhowever, 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\&. .br \fB4. \fRthen you can pull and merge, leaving frotz\&.c and filfre\&.c changes still in the working tree\&. .br .TP Undo a merge or pull .nf $ git pull \fB(1)\fR 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 \fB(2)\fR $ git pull \&. topic/branch \fB(3)\fR Updating from 41223\&.\&.\&. to 13134\&.\&.\&. Fast forward $ git reset \-\-hard ORIG_HEAD \fB(4)\fR .fi .sp \fB1. \fRtry 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\&. .br \fB2. \fR"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\&. .br \fB3. \fRmerge a topic branch into the current branch, which resulted in a fast forward\&. .br \fB4. \fRbut 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\&. .br .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\&. .nf $ git checkout feature ;# you were working in "feature" branch and $ work work work ;# got interrupted $ git commit \-a \-m 'snapshot WIP' \fB(1)\fR $ git checkout master $ fix fix fix $ git commit ;# commit with real log $ git checkout feature $ git reset \-\-soft HEAD^ ;# go back to WIP state \fB(2)\fR $ git reset \fB(3)\fR .fi .sp \fB1. \fRThis commit will get blown away so a throw\-away log message is OK\&. .br \fB2. \fRThis removes the \fIWIP\fR commit from the commit history, and sets your working tree to the state just before you made that snapshot\&. .br \fB3. \fRAt this point the index file still has all the WIP changes you committed as \fIsnapshot WIP\fR\&. This updates the index to show your WIP files as uncommitted\&. .br .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