Skip to content
This repository was archived by the owner on Feb 24, 2026. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 21 additions & 9 deletions template/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ wt-rm target:
exit 1
fi

# Resolve the branch name from the worktree before removing it
RESOLVED=$(realpath "$TARGET" 2>/dev/null || echo "$TARGET")
BRANCH=$(git worktree list --porcelain | awk -v path="$RESOLVED" \
'/^worktree /{wt=substr($0,10)} /^branch /{if(wt==path){b=substr($0,8); sub(/^refs\/heads\//,"",b); print b}}')
[ -z "$BRANCH" ] && BRANCH="$TARGET"

git worktree remove "$TARGET"

# Remove empty parent directories left after worktree removal
Expand All @@ -65,11 +71,11 @@ wt-rm target:
DIR="$(dirname "$DIR")"
done

if ! git branch -d "$TARGET" 2>/dev/null; then
echo "Worktree removed but branch '$TARGET' has unmerged changes."
echo " To delete it anyway: git branch -D $TARGET"
if ! git branch -d "$BRANCH" 2>/dev/null; then
echo "Worktree removed but branch '$BRANCH' has unmerged changes."
echo " To delete it anyway: git branch -D $BRANCH"
else
echo "Removed worktree and branch '$TARGET'"
echo "Removed worktree and branch '$BRANCH'"
fi

# Remove a worktree and delete its local and remote branches (accepts branch name or folder path)
Expand All @@ -84,6 +90,12 @@ wt-destroy target:
exit 1
fi

# Resolve the branch name from the worktree before removing it
RESOLVED=$(realpath "$TARGET" 2>/dev/null || echo "$TARGET")
BRANCH=$(git worktree list --porcelain | awk -v path="$RESOLVED" \
'/^worktree /{wt=substr($0,10)} /^branch /{if(wt==path){b=substr($0,8); sub(/^refs\/heads\//,"",b); print b}}')
[ -z "$BRANCH" ] && BRANCH="$TARGET"

git worktree remove "$TARGET" --force

# Remove empty parent directories left after worktree removal
Expand All @@ -93,13 +105,13 @@ wt-destroy target:
DIR="$(dirname "$DIR")"
done

git branch -D "$TARGET"
git branch -D "$BRANCH"

if git remote | grep -q . && git ls-remote --exit-code --heads origin "$TARGET" >/dev/null 2>&1; then
git push origin --delete "$TARGET"
echo "Removed worktree, local branch, and remote branch '$TARGET'"
if git remote | grep -q . && git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
git push origin --delete "$BRANCH"
echo "Removed worktree, local branch, and remote branch '$BRANCH'"
else
echo "Removed worktree and local branch '$TARGET' (no remote branch found)"
echo "Removed worktree and local branch '$BRANCH' (no remote branch found)"
fi

# List all active git worktrees
Expand Down