git worktree:複数のブランチを同時にチェックアウトする

git worktreeガイド

git worktree:add、list、remove、pruneの使い方と例 | We.Inc

新しいブランチ、既存のブランチ、detachedコミット用の正確なgit worktree addコマンドを作成し、worktreeを安全に一覧、ロック、移動、削除、pruneする方法を解説します。

git worktreeを使うと、1つのリポジトリに複数の作業フォルダーを持たせ、それぞれ別のブランチを開きながら、1つのオブジェクトストアを共有できます。git worktree add ../hotfix -b hotfixで新しいブランチの新しいフォルダーを作り、git worktree listですべてを確認し、終わったらgit worktree remove ../hotfixを実行します。2つ目のクローンは不要です。

日常的に使うworktreeコマンド

ちょっとした修正を頼まれるたびにstashし、ブランチを切り替え、ビルドし直すのは時間の無駄です。worktreeを使えば、同じリポジトリの2つ目のチェックアウトを別のフォルダーに持てるので、時間のかかるテスト、コードレビュー、緊急のパッチをそれぞれ別のディレクトリで進められます。ビルダーでコマンドを作成し、あまり使わないサブコマンドはリファレンスで確認しましょう。

よくある質問

worktreeとクローンの違いは何ですか?

クローンは履歴を含むリポジトリ全体をコピーします。リンクされたworktreeは元のリポジトリのオブジェクトとrefを共有し、新しい作業フォルダーと少しのメタデータを追加するだけです。そのため、ある場所で作ったコミットはfetchしなくても他の場所からすぐに見えます。

2つのworktreeで同じブランチを使えますか?

デフォルトではできません。2つのフォルダーが1つのブランチを動かすと互いの作業を上書きしてしまうため、git worktree addはすでに別の場所でチェックアウトされているブランチを拒否します。--forceで上書きできますが、ほとんどの場合はdetached HEADか別のブランチを使うほうが適切です。

git worktree removeが失敗するのはなぜですか?

作業を失わないよう、フォルダーに変更された追跡ファイルや未追跡ファイルがあると拒否します。先にコミットするかフォルダーをきれいにするか、--forceを付けてください。ロックされたworktreeには--forceを2回付ける必要があります。

git worktree pruneは何をしますか?

フォルダーがもう存在しないworktreeについて、gitが保持している残りの記録を削除します。たとえばrm -rfでフォルダーを消した後です。先に何が削除されるかを確認するには-nを付けます。

worktreeのフォルダー名を変更したり移動したりするには?

gitが記録を更新できるよう、git worktree move <worktree> <new-path>を使います。すでにファイルマネージャーで移動してしまった場合は、新しい場所からgit worktree repairを実行して再接続しましょう。

worktreeを使うべき場面

共有されるものとされないもの

git worktreeのすべてのサブコマンド

git worktreeのサブコマンドと構文

今のブランチを離れずにhotfixする

機能開発の途中で本番環境にパッチを当てる

機能開発のフォルダーはそのまま残ります。修正は兄弟フォルダーで行い、pushしたら削除します。

スクリプトで扱いやすい形式でworktreeを一覧表示する

各worktreeは空行で区切られた複数行のブロックで、パス、HEADのハッシュ、ブランチ(またはdetached)が並びます。

worktreeコマンドビルダー

worktree用のフォルダー

ブランチ名

開始点(ブランチ、タグ、コミット)

チェックアウトするもの

新しいブランチ

既存のブランチ

detachedコミット

作成して開く

作業が終わったら

フォルダーのパスを入力すると、コマンドが表示されます。

ヒント:../で始まるパスにすると、新しいフォルダーがメインのチェックアウトの隣に作られます。

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る