Skip to content

Instantly share code, notes, and snippets.

@dhh
Created December 28, 2025 18:16
Show Gist options
  • Select an option

  • Save dhh/18575558fc5ee10f15b6cd3e108ed844 to your computer and use it in GitHub Desktop.

Select an option

Save dhh/18575558fc5ee10f15b6cd3e108ed844 to your computer and use it in GitHub Desktop.
# Create a new worktree and branch from within current git directory.
ga() {
if [[ -z "$1" ]]; then
echo "Usage: ga [branch name]"
exit 1
fi
local branch="$1"
local base="$(basename "$PWD")"
local path="../${base}--${branch}"
git worktree add -b "$branch" "$path"
mise trust "$path"
cd "$path"
}
# Remove worktree and branch from within active worktree directory.
gd() {
if gum confirm "Remove worktree and branch?"; then
local cwd base branch root
cwd="$(pwd)"
worktree="$(basename "$cwd")"
# split on first `--`
root="${worktree%%--*}"
branch="${worktree#*--}"
# Protect against accidentially nuking a non-worktree directory
if [[ "$root" != "$worktree" ]]; then
cd "../$root"
git worktree remove "$worktree" --force
git branch -D "$branch"
fi
fi
}
@jordan-brough
Copy link

jordan-brough commented Dec 30, 2025

In zsh the local path will mess up the path and git will probably fail with zsh: command not found: git.

Changing path to worktree_path fixes it.

@dheerapat
Copy link

ga should return 1 instead of exit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment