Blog

git worktree で複数ブランチの同時作業を快適にするハンズオン

はじめに

こんにちは!
マイニフティチームの寺島です。

最近はAIエージェントでの並列開発が活発になってきましたね。
同じリポジトリ内で、一つのタスクをしている間に別のタスクを実施したいことが多々出てくる昨今。
ついに私もgit worktreeに入門しました。
AIエージェントにバリバリ並列作業をしてもらう前に、機能について知っていると安心してお任せできますので、お勉強をしました。
せっかくの機会なので簡単に、git worktree についてハンズオン形式でまとめてみましたので、良ければ読んでいただけると嬉しいです。

git worktreeとは

Gitで「別の作業領域(ワークスペース)」を構築して並行作業を行う機能は、 git worktree(ワークツリー) と呼ばれます。

git worktreeを使えば、1つのリポジトリから複数の作業ディレクトリを別々の場所に作成し、それぞれ異なるブランチを同時に展開しておくことができます。

1. ハンズオン用のリポジトリを作成する

まずはベースとなるリポジトリを作成し、最初のコミットを行います。

2. 新機能の開発を始める(メインの作業)

新しい機能(feature/A)の開発を開始します。

ここで git status を確認すると、feature_a.txt が未追跡(Untracked)の状態で残っています。この未コミット状態をキープしたまま、次の手順に進みます。

3. worktree を使って別ディレクトリで作業する

現在のリポジトリディレクトリの外(一つ上の階層)に、hotfix 用のディレクトリを作成し、新しいブランチ hotfix/bug-fix を割り当てます。

新しい作業ディレクトリである../hotfix-dirに対して、-bオプションで新ブランチhotfix/bug-fixmainブランチから作成されます。

作業ツリーの一覧を確認してみましょう。

出力例:

/path/to/git-worktree-demo <ハッシュ値> [feature/A]

/path/to/hotfix-dir <ハッシュ値> [hotfix/bug-fix]

これで、1つのローカルリポジトリを共有しながら、2つのディレクトリで別々のブランチが展開されている状態が作れました。

4. 別タスクを実施する

新しく作られたディレクトリに移動して作業します。

5. worktree を片付けて元の作業に戻る

別タスクが終わったので、元のディレクトリに戻り、不要になった worktree を削除します。

Tips: もしエクスプローラー等で直接ディレクトリを削除してしまった場合は、git worktree prune コマンドを実行することでGitの管理から綺麗に切り離すことができます。

最後に、元のブランチ(feature/A)の状態を確認してみましょう。

先ほど作りかけた feature_a.txt が未追跡のまま、残っていることが確認できると思います。

おわりに

今回のハンズオンのまとめです。

  • git worktree add <パス> -b <新ブランチ名> <派生元ブランチ>別ディレクトリに新しい作業ツリーを作成する。
  • git worktree list現在展開されている作業ツリーの一覧を確認する。
  • git worktree remove <パス>不要になった作業ツリーを安全に削除する。

よい並列開発ライフが送れることを祈っています!

ニフティでは、
さまざまなプロダクトへ挑戦する
エンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトより
お気軽にご連絡ください!

ニフティに興味をお持ちの方は
キャリア登録をぜひお願いいたします!

connpassでニフティグループに
参加いただくと
イベントの
お知らせが届きます!