Kalau kamu sering kerja di repo Git yang penuh branch lama, skrip ini bisa jadi solusi.
Dengan gh-force-clean.sh, kamu bisa otomatis menghapus branch lokal dan remote yang sudah di-merge ke main
(atau branch lain), tanpa repot periksa satu-satu. ๐
Cocok buat developer yang ingin menjaga repo tetap bersih, atau buat pipeline CI/CD yang rapi.
๐งฉ Fitur Unggulan
- ๐ Deteksi otomatis branch yang sudah di-merge ke branch utama
- ๐งน Bersihkan branch lokal & remote sekaligus
- โ๏ธ Dukungan opsi
--dry-run
untuk simulasi - ๐ค Mode
--auto
untuk CI/CD tanpa konfirmasi - ๐ง Bisa ganti branch utama pakai
--base <nama_branch>
- ๐ Output berwarna, mudah dibaca di terminal
โ๏ธ Isi Skrip: gh-force-clean.sh
#!/usr/bin/env bash
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; RESET='\033[0m'
DRY_RUN=false; AUTO=false; BASE_BRANCH="main"
usage() {
echo "Gunakan: $0 [--dry-run] [--auto] [--base ]"
exit 0
}
while [[ $# -gt 0 ]]; do
case "$1" in
--dry-run) DRY_RUN=true; shift ;;
--auto) AUTO=true; shift ;;
--base) BASE_BRANCH="${2:-main}"; shift 2 ;;
-h|--help) usage ;;
*) echo "Argumen tidak dikenal: $1"; usage ;;
esac
done
echo -e "${CYAN}๐ Mengecek branch utama: ${BASE_BRANCH}${RESET}"
git fetch -p origin >/dev/null 2>&1
git checkout "$BASE_BRANCH" >/dev/null 2>&1 || exit 1
MERGED_BRANCHES=$(git branch --merged "$BASE_BRANCH" | grep -vE "^\*|$BASE_BRANCH$")
REMOTE_MERGED=$(git branch -r --merged "origin/$BASE_BRANCH" | grep -vE "origin/(HEAD|$BASE_BRANCH)$")
[[ -z "$MERGED_BRANCHES" ]] && echo "Tidak ada branch lokal yang sudah di-merge"
[[ -z "$REMOTE_MERGED" ]] && echo "Tidak ada branch remote yang sudah di-merge"
if [[ "$DRY_RUN" == true ]]; then
echo "[DRY RUN] Tidak ada branch dihapus."
exit 0
fi
if [[ "$AUTO" == false ]]; then
read -rp "Lanjut hapus semua branch yang sudah di-merge? [y/N]: " CONFIRM
[[ ! "$CONFIRM" =~ ^[Yy]$ ]] && { echo "Dibatalkan."; exit 0; }
fi
for BR in $MERGED_BRANCHES; do
git branch -d "$BR" >/dev/null 2>&1 || git branch -D "$BR" >/dev/null 2>&1
done
for RB in $REMOTE_MERGED; do
RB_NAME=$(echo "$RB" | sed 's|origin/||')
git push origin --delete "$RB_NAME" >/dev/null 2>&1 || true
done
echo -e "${GREEN}โ
Pembersihan selesai.${RESET}"
๐ก Cara Menggunakan
chmod +x gh-force-clean.sh
# Mode interaktif (manual)
./gh-force-clean.sh
# Simulasi (hanya tampilkan tanpa hapus)
./gh-force-clean.sh --dry-run
# Mode otomatis untuk CI/CD
./gh-force-clean.sh --auto
# Jika repo kamu pakai branch utama "develop"
./gh-force-clean.sh --base develop
๐ง Tips Aman
- Selalu jalankan
--dry-run
dulu sebelum hapus sungguhan. - Gunakan
--auto
hanya di pipeline atau repositori yang kamu kontrol penuh. - Jika branch belum di-merge atau masih ada konflik, skrip ini tidak akan menghapusnya.