mirror of
https://github.com/github/awesome-copilot.git
synced 2026-04-11 02:35:55 +00:00
Script to clean up branches (#1218)
This commit is contained in:
80
scripts/delete-gone-branches.sh
Executable file
80
scripts/delete-gone-branches.sh
Executable file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<'EOF'
|
||||||
|
Usage: bash scripts/delete-gone-branches.sh [--apply]
|
||||||
|
|
||||||
|
Find local branches whose upstream is marked "[gone]" and delete them.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--apply Actually delete the branches with `git branch -D`
|
||||||
|
--help Show this help text
|
||||||
|
|
||||||
|
Without --apply, the script prints what it would delete.
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
apply=false
|
||||||
|
|
||||||
|
case "${1:-}" in
|
||||||
|
"")
|
||||||
|
;;
|
||||||
|
--apply)
|
||||||
|
apply=true
|
||||||
|
;;
|
||||||
|
--help|-h)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1" >&2
|
||||||
|
usage >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
git fetch --prune --quiet
|
||||||
|
|
||||||
|
mapfile -t gone_branches < <(
|
||||||
|
git for-each-ref --format='%(refname:short) %(upstream:track)' refs/heads |
|
||||||
|
while IFS= read -r line; do
|
||||||
|
branch=${line% *}
|
||||||
|
tracking=${line#"$branch "}
|
||||||
|
if [[ "$tracking" == "[gone]" ]]; then
|
||||||
|
printf '%s\n' "$branch"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
)
|
||||||
|
|
||||||
|
if [[ ${#gone_branches[@]} -eq 0 ]]; then
|
||||||
|
echo "No local branches with gone upstreams found."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
current_branch="$(git branch --show-current)"
|
||||||
|
|
||||||
|
echo "Found ${#gone_branches[@]} branch(es) with gone upstreams:"
|
||||||
|
printf ' %s\n' "${gone_branches[@]}"
|
||||||
|
|
||||||
|
if [[ "$apply" != true ]]; then
|
||||||
|
echo
|
||||||
|
echo "Dry run only. Re-run with --apply to delete them."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
deleted_count=0
|
||||||
|
|
||||||
|
for branch in "${gone_branches[@]}"; do
|
||||||
|
if [[ "$branch" == "$current_branch" ]]; then
|
||||||
|
echo "Skipping current branch: $branch"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
git branch -D "$branch"
|
||||||
|
deleted_count=$((deleted_count + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Deleted $deleted_count branch(es)."
|
||||||
Reference in New Issue
Block a user