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
git reset --soft HEAD~
Another alternative is to use
^ alone is a shortcut for
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
Resets the index and working tree. Any changes to tracked files in the working tree since <commit> are 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>