📚

git worktreeの管理を便利にするgh-wt拡張を作った

に公開

TL;DR

  • git worktreeを便利に管理するGitHub CLI拡張「gh-wt」をつくったよ
  • fzfを使った対話的なworktree選択、削除
  • gh extensionで簡単に導入可能 gh extension install HikaruEgashira/gh-wt

はじめに

複数のブランチで並行作業をしていると、ブランチの切り替えでstashやcommitを強制されることがよくありますよね。ClineやみなさんのPRレビューetc。そんな時に便利なのがgit worktreeですが、コマンドが長くてカスタマイズしてる人も多いと思います。

拙著のgh extension「gh-q」の続編となってますので一緒に導入すると環境が便利になること間違いなしです。

https://zenn.dev/sqer/articles/4bfc05e7ec4eb4

既存の解決策と課題

git worktreeの基本的な使い方:

# 新しいworktreeを作成
git worktree add ../project-feature feature-branch

# worktreeの一覧表示
git worktree list

# worktreeの削除
git worktree remove ../project-feature

長いですね

gh-wtによる解決

gh extensionを利用しているので導入が簡単であることも特徴です。

gh extension install HikaruEgashira/gh-wt

基本的な使い方

# worktreeの一覧表示
gh wt list

# 新しいworktreeを作成
gh wt add feature-branch

# worktreeを削除(対話的選択)
gh wt remove

# worktreeでVS Codeを開く(対話的選択)
gh wt code

実際の使用例

例えば、~/user/projectで作業中に:

# 機能ブランチ用のworktreeを作成
$ gh wt add feature-login
Creating worktree for branch 'feature-login' at '/Users/user/project-feature-login'
Worktree created successfully!

# 作成されたworktreeでVS Codeを開く
$ gh wt code
# fzfでworktreeを選択 → VS Codeが起動

技術的な実装

ブランチの自動検出

リモートブランチとローカルブランチの存在を確認し、適切なworktree作成方法を選択:

if (cd "$selected_dir" && git show-ref --verify --quiet refs/heads/"$branch"); then
    # ローカルブランチが存在
    git worktree add "$worktree_path" "$branch"
elif (cd "$selected_dir" && git show-ref --verify --quiet refs/remotes/origin/"$branch"); then
    # リモートブランチが存在、トラッキングブランチを作成
    git worktree add "$worktree_path" -b "$branch" "origin/$branch"
else
    # ブランチが存在しない、新規作成
    git worktree add "$worktree_path" -b "$branch"
fi

まとめ

gh-wtを使うことで、git worktreeの操作が格段に便利になります。特にAgentで並行作業する現代においては、作業効率の向上を実感していただけること間違いなしです。

ぜひ使ってみてください!フィードバックやコントリビューションもお待ちしています。

GitHub: https://github.com/HikaruEgashira/gh-wt

Discussion