Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete all branches that are more than X days/weeks old

Tags:

git

shell

I found the below script that lists the branches by date. How do I filter this to exclude newer branches and feed the results into the Git delete command?

for k in $(git branch | sed /\*/d); do    echo "$(git log -1 --pretty=format:"%ct" $k) $k" done | sort -r | awk '{print $2}' 
like image 892
Kenoyer130 Avatar asked Apr 26 '12 00:04

Kenoyer130


People also ask

How do you get rid of stale branches?

Deleting Local Branches First, use the git branch -a command to display all branches (both local and remote). Next, you can delete the local branch, using the git branch -d command, followed by the name of the branch you want to delete.

Should you delete old branches?

They're unnecessary. In most cases, branches, especially branches that were related to a pull request that has since been accepted, serve no purpose. They're clutter. They don't add any significant technical overhead, but they make it more difficult for humans to work with lists of branches in the repository.

How do I delete a branch in bulk?

You can use git gui to delete multiple branches at once. From Command Prompt/Bash -> git gui -> Remote -> Delete branch ... -> select remote branches you want to remove -> Delete.


1 Answers

How about using --since and --before?

For example, this will delete all branches that have not received any commits for a week:

for k in $(git branch | sed /\*/d); do    if [ -z "$(git log -1 --since='1 week ago' -s $k)" ]; then     git branch -D $k   fi done 

If you want to delete all branches that are more than a week old, use --before:

for k in $(git branch | sed /\*/d); do    if [ -z "$(git log -1 --before='1 week ago' -s $k)" ]; then     git branch -D $k   fi done 

Be warned though that this will also delete branches that where not merged into master or whatever the checked out branch is.

like image 145
Daniel Baulig Avatar answered Sep 18 '22 17:09

Daniel Baulig