Git Reset
Some notes on how to reset stuff with git. There is a whole world of resetting with git, see the git-reset Documentation if you want to go deeper. The following are a few of the common day to day reset commands that I use for various scenarios.
Reset all local changes
When you have been messing around and want to reset all your local changes that have not yet been committed.
git reset --hard
Resetting the last local commit
Want to undo your last local commit? Forgot to remove some logging? Realised your commit is horrendous and you cannot bear to push it? Reset it. There is a great explanation in the Tower documentation on undoing the last commit.
Keep changes
Reset the last commit and keep the changes that you made.
git reset --soft HEAD~1
Alternatively you can drop the 1
here as ~
alone is a shortcut for ~1
git reset --soft HEAD~
Another alternative is to use HEAD^
. The ^
alone is a shortcut for ^1
.
git reset HEAD^
There is a good explanation here on the meaning and difference between the usage of the caret and tilde symbols.
Discard the last commit
Just get rid of the last commit entirely. Make sure you really don’t want to lose any changes you made.
git reset --hard HEAD~1
–hard Resets the index and working tree. Any changes to tracked files in the working tree since
git-reset Documentationare discarded.
Discard merge
Got into local merge trouble? Then bail out.
git reset --merge
Reset branch from origin
This one always catches me out for some reason. When someone elses PR you already have checked out has changed, if you pull that branch you may get conflicts. I do not want to have mess with conflicts here as it is none of my business, fetch everything then do a hard reset on the origin branch to get the latest changes.
git fetch --all
git reset --hard origin/<branch-name>