The idea of branches in git is a nice feature as it allows to work on separate parts of a project at the same time. But, the more branches you have, the more difficult they are to manage.
When you create a local branch, most of the time you would push the changes in that branch to a branch of the same name in the remote repository. And when you're done with all the necessary changes for that branch, you would merge the branch to your production branch (like
On merging that branch, the branch becomes irrelevant, and GitHub, for example, gives you the option to delete the branch afterward. When you do this, you may forget to delete the local branch. Repeating this for many other branches leaves you with many outdated local branches.
prune git option
An effective solution to the problem above is the
prune git option. But note that, the
prune command can be used in different ways. Here's some of them:
git prune git remote prune git fetch --prune ## e.t.c
git prune is a different command beyond the scope of this article. For this article, we're only concerned with
git remote prune origin and
git fetch --prune. These two commands have similarities and few differences. Let's look at them.
git remote prune origin
This command deletes local branches with references to remote branches that do not exist. Deleted remote branch references can be a result of a delete-branch-after merge-operation.
git fetch --prune
This does the same above, but before
pruneing, the latest remote data is first fetched. This is recommended over the command above, as the latest remote data may contain recovered remote branch refs.
Deleting outdated branches on every fetch request
Instead of passing the
--prune option to every
git fetch operation you do, you can configure git to automatically perform a prune when you fetch. Here's how:
git config --global fetch.prune true
The command above configures your global git configuration to perform a prune on every fetch. Here's what your local
.gitconfig now looks like:
[user] name = ... email = ... [fetch] prune = true
Now when you do a
git fetch, outdated local branches will be deleted automatically.