Reset a git repository back to origin
By Mike Street
With a myriad of branches and developers, Git repositories can quickly get in a muddle. Stale branches, people forgetting to push to origin and mixed commits with rebases and cherry-picks are all ingredients for a big fresh pot of what-the-hell with a side of rm -rf
.
I recently had to help a colleague get their local Git repo back to what was on the origin (Github/Gitlab etc.). We didn't want to delete the folder again as we use ddev for our local development and doing that would clear out config files - something which can be rebuilt but would be easier if we could avoid it.
We ran through the following commands which got the local repository nice and clean and back to it's original state.
Delete all local branches except main
Replace main
with your primary branch name below.
git branch | grep --invert-match "main" | xargs git branch --delete
Clean any remote branches your repository thinks it knows about that no longer exist
git fetch origin --prune
Remove all existing stashes
git stash clear
Reset your current main branch back to what is on origin
git reset --hard origin/main
This last one only works correctly as a git fetch origin
was run beforehand. If running this independently then ensure a git fetch
is run first.
Remove everything in your repository that shouldn't be there
If you want to get rid of everything that is not committed (and not .gitignored
) you can run the following command.
git clean
Be aware though, with the (in)correct flags it may remove config files & folders too. Run git clean --help
to begin. It is worth noting there is also an interative mode (--interactive
) which will ask you about specific files and/or folders. I encountered mis-deletetion when combined with DDEV.