Git Branch コマンド
このドキュメントでは、git branch コマンドの詳細と全体的な Git ブランチング・モデルについて説明します。ブランチングは、現代的なほとんどの VCS(バージョン管理システム)で使用できる機能です。他の VCS のブランチングは、時間とディスク領域を大幅に消費する場合があります。一方、Git のブランチは、毎日の開発プロセスに組み込まれています。Git のブランチは、変更のスナップショットを効果的に指し示すポインターです。新たなフィーチャー開発やバグ・フィックスを行う場合、その規模の大小を問わず、変更をカプセル化するためにブランチを作成します。これにより、不安定なコードが main コード・ベースにマージされにくくなり、main ブランチにマージする前にフィーチャーの履歴を整理することも可能になります。
このドキュメントでは、git branch コマンドの詳細と全体的な Git ブランチング・モデルについて説明します。ブランチングは、現代的なほとんどの VCS(バージョン管理システム)で使用できる機能です。他の VCS のブランチングは、時間とディスク領域を大幅に消費する場合があります。一方、Git のブランチは、毎日の開発プロセスに組み込まれています。Git のブランチは、変更のスナップショットを効果的に指し示すポインターです。新たなフィーチャー開発やバグ・フィックスを行う場合、その規模の大小を問わず、変更をカプセル化するためにブランチを作成します。これにより、不安定なコードが main コード・ベースにマージされにくくなり、main ブランチにマージする前にフィーチャーの履歴を整理することも可能になります。
関連資料
高度な Git ログ
ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
上の図は、小規模なフィーチャー開発と長期のフィーチャー開発という、独立した 2 つの開発ラインを有するリポジトリを視覚化したものです。これらをブランチで開発することによって、両方を同時に進行させられるだけでなく main ブランチを不完全なコードから守れます。
Git ブランチの背景にある設計思想は、他のバージョン管理システムモデルよりもはるかに軽量です。SVN ではディレクトリ間で直接ファイルのコピーを行うのに対し、Git におけるブランチはコミットに対する参照として保存されます。この意味でブランチとは、コミットのコンテナーではなく、一連のコミットの先端を表すものと言えます。ひとつのブランチの履歴はコミットの相互関係を通して外挿されます。
読み進むに従い、Git ブランチは SVN ブランチとは異なるものであることが理解できると思います。SVN ブランチが作業成果を時折大規模にまとめるためのものであるのに対し、Git ブランチは日常的なワークフローに不可欠な要素です。Git の内部ブランチアーキテクチャの詳細について、以下に説明します。
仕組み
ブランチとは独立した開発ラインを意味します。ブランチは、編集 / ステージ / コミットプロセスを抽象化した概念です。作業ディレクトリ、ステージングエリア、プロジェクト履歴を全く新しく作成する手段であると考えることもできます。新しいコミットは現在のブランチの履歴に記録され、プロジェクト履歴のフォークを形成します。
git branch コマンドは、ブランチの作成、一覧表示、名称変更、削除を行うコマンドです。このコマンドにはブランチの切り替えを行う機能も、フォークした履歴を統合して元に戻す機能もありません。そのため、多くの場合 git branch コマンドは git checkout コマンドおよび git merge コマンドと緊密に統合されます。
よく使われるオプション
git branch リポジトリ内のすべてのブランチを一覧表示します。これは git branch --list と同義です。
git branch <branch> という名称の新規ブランチを作成します。作成された新規ブランチはチェックアウトされません。
git branch -d <branch> 指定したブランチを削除します。ブランチにマージされていない変更が残っている場合は Git が削除を拒否するため、このコマンドは「安全な」操作です。
git branch -D <branch> 指定したブランチにマージされていない変更が残っていたとしてもそれを強制的に削除するコマンドです。このコマンドは、特定の開発ラインで行われたすべてのコミットを完全に破棄する場合に使用します。
git branch -m <branch> 現在のブランチの名前を に変更します。
git branch -a すべてのリモートブランチを一覧表示します。
ブランチの作成
ブランチはコミットへの単なるポインターであることを理解する必要があります。ブランチを作成する場合に Git が行うのは新しいポインターの生成です。リポジトリはまったく変更されません。たとえば、下図のようなリポジトリで作業を始めるとします。
続いて、次のコマンドを使用してブランチを作成するものとします:
git branch crazy-experiment ここではリポジトリの履歴には何の変更も加えられません。新たに作られるのは現在のコミットに対するポインターのみです:
この操作は単に新規ブランチを作成するのみであることに留意してください。このブランチへのコミット追加を開始するには、git checkout コマンドを使用してブランチを選択する必要があります。その後、通常の git add コマンドや git commit コマンドを使用します。
リモートブランチの作成
これまでの例では、ローカルブランチの操作を説明しました。git branch コマンドは、リモートブランチに対しても動作します。リモートブランチを操作するには、まずリモートリポジトリを設定し、ローカルリポジトリの設定に追加する必要があります。
$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo このコマンドは、ローカル ブランチ crazy-experiment のコピーをリモート リポジトリ にプッシュします。
ブランチの削除
ブランチでの作業が終了し master ブランチへのマージが完了すると、ブランチを削除しても履歴を失うことはありません:
git branch -d crazy-experiment ただし、指定したブランチのマージが完了していない場合は、上のコマンドを実行するとエラーメッセージが表示されます:
error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.
これにより、開発ライン全体へのアクセス手段の喪失を防止できます。ブランチを削除してもよいという確信がある場合 (そのブランチで行った実験的開発が失敗した場合など) は、大文字の -D フラグを使用します。
git branch -D crazy-experiment このコマンドを実行すると、ブランチのステータスとは無関係に一切の警告なしに削除を行うため、慎重に使用しなければなりません。
上述のコマンドは、ブランチのローカルコピーを削除しますが、リモートリポジトリにはまだブランチが存在している場合があります。リモートブランチを削除するには、以下のコマンドを実行します。
git push origin --delete crazy-experiment または
git push origin :crazy-experiment この操作により、リモートリポジトリ origin に削除信号がプッシュされ、リモートブランチ crazy-experiment の削除がトリガーされます。
要約
このドキュメントでは、Git のブランチングの動作と git branch コマンドについて説明しました。git branch コマンドの主な機能は、ブランチの作成、リスト表示、名称変更、削除です。通常、このコマンドを実行した後のブランチをさらに操作するには、git checkout のような他のコマンドを併用します。ブランチの切り替えやマージなどの git checkout ブランチ操作の詳細については、git checkout ページを参照してください。
他の VCS と比較すると、Git のブランチ操作は低コストで頻繁に使用されます。この柔軟性によって、Git ワークフローを強力にカスタマイズできます。Git ワークフローの詳細については、feature ブランチ ワークフロー、GitFlow ワークフロー、フォーク型ワークフローの各ページの説明をご参照ください。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。
Bitbucket ブログ
DevOps ラーニング パス