git_delete_branches
This script will delete all local and remote branches from a given repository.
The following parameters are optional:
d
-
the directory (
$PWD
if not given) containing the Git repository k
-
the name of the branch to keep (defaults to the value of the
init.defaultBranch
Git configuration parameter ormain
if not set). y
-
assume "yes" as answer to all prompts and run non-interactively
Protected remote branches will not be deleted. |
All other local and remote branches will be irreversibly deleted—be careful, you have been warned! |
Usage
$ scripts/git/git_delete_branches.sh
$ scripts/git/git_delete_branches.sh -d /tmp/example
$ scripts/git/git_delete_branches.sh -k master
Example
$ (cd /tmp/example && git branch -vv --all)
docs/issue-1 69bad6f [origin/docs/issue-1] issue 1
feat/issue-2 b542a1c [origin/feat/issue-2: ahead 1] not pushed
fix/issue-3 10caf8a issue 3
* main 4cf1f7d [origin/main] initial
remotes/origin/docs/issue-1 69bad6f issue 1
remotes/origin/feat/issue-2 b7b9f06 issue 2
remotes/origin/main 4cf1f7d initial
$ scripts/git/git_delete_branches.sh -d /tmp/example
WARNING: The following branches will be deleted from the repository located at '/private/tmp/example'.
Local branches:
- docs/issue-1
- feat/issue-2
- fix/issue-3
Remote branches:
- docs/issue-1
- feat/issue-2
Do you really want to irreversibly delete these branches (Y/N)? y
$ (cd /tmp/example && git branch -vv --all)
* main 4cf1f7d [origin/main] initial
remotes/origin/main 4cf1f7d chore: initial
$ (cd /tmp/example2 && git branch -vv --all)
docs/issue-1 bf48e73 [origin/docs/issue-1] issue 1
feat/issue-2 12bfe9e [origin/feat/issue-2: ahead 1] not pushed
fix/issue-3 137da91 issue 3
* main 3d1dd24 [origin/main] initial
remotes/origin/docs/issue-1 bf48e73 issue 1
remotes/origin/feat/issue-2 f8b0f86 issue 2
remotes/origin/main 3d1dd24 initial
$ scripts/git/git_delete_branches.sh -d /tmp/example2 -k 'docs/issue-1'
WARNING: The following branches will be deleted from the repository located at '/private/tmp/example2'.
Local branches:
- feat/issue-2
- fix/issue-3
- main
Remote branches:
- feat/issue-2
- main
Do you really want to irreversibly delete these branches (Y/N)? y
To github.com:sdavids/example2.git
! [remote rejected] main (refusing to delete the current branch: refs/heads/main)
error: failed to push some refs to 'github.com:sdavids/example2.git'
$ (cd /tmp/example2 && git branch -vv --all)
* docs/issue-1 bf48e73 [origin/main: ahead 1] docs: issue-1
remotes/origin/docs/issue-1 bf48e73 docs: issue-1
remotes/origin/main 3d1dd24 chore: initial