3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

複数ブランチを並行して作業したいとき、真っ先に思いつく解決策は「ブランチを切り替える」ことです。しかしブランチ数が増えると、切り替えのたびにファイルが書き換わる煩わしさが出てきます。

この問題を解決する方法は2つあります。

  • 複数クローン方式:同じリポジトリを複数回クローンし、フォルダごとにブランチを割り当てる
  • Git Worktree:1つのリポジトリから複数の作業フォルダを展開するGitの機能

どちらも「ブランチ切り替えなしに複数ブランチのファイルを同時に扱える」という点では同じです。例えば、Qiita CLI × GitHub Actionsを使った記事管理フローのように記事ごとにブランチを分けて管理している場合、記事が増えるにつれてどちらの方法が合っているか気になってきます。この記事では両者を比較し、自分のユースケースに合った方を選ぶための指針をまとめます。


1. 複数クローン方式

概要

同じリポジトリを複数回クローンし、フォルダ名でブランチを区別する方法です。

~/dev/
├── my-repo-main/      # main ブランチ
├── my-repo-feature-a/ # feature/a ブランチ
└── my-repo-feature-b/ # feature/b ブランチ

セットアップ手順

# feature/a 用
git clone git@github.com:yourname/my-repo.git my-repo-feature-a
cd my-repo-feature-a && git checkout feature/a

# feature/b 用
git clone git@github.com:yourname/my-repo.git my-repo-feature-b
cd my-repo-feature-b && git checkout feature/b

日常の操作

各フォルダは独立した通常のリポジトリなので、特別な知識は不要です。

# feature/a で作業
cd ~/dev/my-repo-feature-a
# ファイルを編集...
git add .
git commit -m "作業内容"
git push origin feature/a

2. Git Worktree

概要

1つのリポジトリから複数の作業フォルダ(worktree)を展開するGitの機能です。.git ディレクトリは1つのまま、複数ブランチのファイルを別フォルダで同時に扱えます。

~/dev/
├── my-repo/           # メインリポジトリ(.git はここだけ)
└── my-repo-worktrees/
    ├── feature-a/     # feature/a ブランチ
    └── feature-b/     # feature/b ブランチ

セットアップ手順

cd ~/dev/my-repo
mkdir -p ~/dev/my-repo-worktrees

git worktree add ~/dev/my-repo-worktrees/feature-a feature/a
git worktree add ~/dev/my-repo-worktrees/feature-b feature/b

# 展開確認
git worktree list

日常の操作

各worktreeフォルダで通常のGit操作が使えます。

cd ~/dev/my-repo-worktrees/feature-a
# ファイルを編集...
git add .
git commit -m "作業内容"
git push origin feature/a

3. 比較

観点 複数クローン Git Worktree
セットアップ git clone を繰り返すだけ git worktree add コマンドが必要
Gitの知識 通常のGit操作のみ worktreeコマンドの理解が必要
ディスク使用量 クローンごとにオブジェクトが重複 .git オブジェクトを1つのリポジトリで共有
git fetch の手間 クローンごとに個別実行が必要 メインリポジトリで1回実行すれば全worktreeに反映
全体の把握 フォルダ一覧を自分で管理する git worktree list で一覧確認できる
フォルダの移動 自由に移動できる コマンドなしでは登録情報とパスがずれてエラーになる(git worktree move <旧パス> <新パス> で移動可能)
同一ブランチの重複展開 可能 不可(1ブランチ1worktreeという制約があるためエラーになる)
スクリプトとの親和性 worktree一覧の取得が面倒 git worktree list --porcelain で扱いやすい

4. どちらを選ぶか

複数クローンが向いているケース

  • ブランチ数が少ない(3〜4個程度)
  • 一括操作スクリプトは使わず、手動で管理する
  • フォルダを自由に移動・整理したい
  • worktreeの仕組みを覚えるコストをかけたくない

Git Worktreeが向いているケース

  • ブランチ数が多い(5個以上)
  • スクリプトで一括コミット・pushをしたい
  • ディスク容量を節約したい
  • git fetch の手間を最小にしたい

判断の目安

ブランチが少ないうちは複数クローンの方がシンプルで迷いにくいです。ブランチが増えてきて「全体を把握する手段」や「一括操作スクリプト」が欲しくなったタイミングでworktreeへ移行するのが現実的です。


おわりに

複数クローンとGit Worktreeは、どちらも「ブランチ切り替えなしに複数ブランチを並行編集する」という同じ問題を解決します。シンプルさを取るか、スケーラビリティを取るかが選択の軸です。

ブランチ数が多い場合のWorktreeの実践的な運用(初回セットアップ・一括コミット・後片付けのスクリプト)は、以下の記事にまとめています。

複数ブランチを効率的に管理する ― Git Worktreeと一括操作シェルの実践

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?