Git のブランチ

完了

あなたは Web 開発者で、仕事に使う Git についてさらに多くのことを習得しようとしています。 あなたは既に、Git のスキルを磨くために猫の画像を取り上げる簡単な HTML および CSS Web サイトを作成しており、友人の Alice および Bob と共にそれに取り組んでいます。

プロジェクトが進むにつれて、誰もが他者の作業を妨げることなく、一度に複数のタスクに取り組めるようにしたいと思っています。 全員の作業を別々にしておく方法が必要です。そうすれば、新しい開発が既存のバグ修正を妨げることはありません。 Git では、"ブランチ" により、このような共同作業が容易になります。

ブランチで行われる作業を共有する必要はなく、他のブランチで行われる作業に干渉しません。 ブランチを使用すると、各トピックに関連するコミットをまとめて他の作業から分離できるため、トピックに加えられた変更を簡単に確認および追跡できます。

最新のソフトウェア開発は、ほぼすべてブランチで行われます。 目標は、作業をチェックインする準備が整うまで、メイン ブランチをクリーンな状態にしておくことです。 次に、変更をメイン ブランチにプッシュするか、さらに良い方法として、pull request を送信して変更をマージします。

Git が以前のバージョン管理システムより優れている点の 1 つは、Git を使用すると、ブランチの作成が非常に高速になることです。要するに、.git/heads の下のファイルに 40 文字のハッシュを書き込みます。 また、ブランチの切り替えも高速です。これは、Git で全ファイルを格納し、変更リストから再構築を試みるのではなく、ファイルを解凍するだけであるためです。 Git でのマージは "それほど" シンプルではありませんが、簡潔であり、多くの場合は完全に自動化されます。

ブランチの概要、その使用方法、およびしくみについて学習しましょう。

ブランチの構造と名前付け

"ブランチ" は、木の枝のように、開発のメイン ラインから分岐するコミットのチェーンにすぎません。

別の VCS から Git に切り替える場合、多少異なる用語に慣れているかもしれません。 VCS Subversion では、既定のブランチに trunk という名前が付けられますが、Git では、master という名前になります。 他のブランチの名前を変更できるように、既定のブランチの名前も変更できます。 このモジュールでは、既定のブランチに main という名前を付けます。

通常、ブランチは、既定のブランチ (この場合は、main) でのコミットから開始されます。 コミットが追加されると、ブランチは別の履歴チェーンを増やします。 最終的に、ブランチでの変更は、main にマージされます。 このモジュールでは、ブランチでコミットを作成し、それらを main ブランチにマージする方法を学習します。

main ブランチから分岐するとします。 何が起こるかを視覚化する方法を以下に示します。

A diagram that shows the relationship of the main branch and local branches.

図の各大文字はコミットを表します。 ブランチには、add-authenticationfix-css-bug などの名前が付けられ、独自のブランチを含めることができます。 最終的な目標は、開発者が互いを妨げることなく、必要な作業を行えるようにし、最終的にメイン ブランチですべての関係者の最高の作業を表すようにすることです。

ブランチの作成と切り替え (git branch と git checkout)

新しいブランチを作成する一般的な理由は、既存の機能に変更を加えるためです。 この目的のためのブランチは、一般に "トピック ブランチ" または "機能ブランチ" と呼ばれます。

新しいブランチを作成するには、git branch コマンドを使用します。 ブランチを切り替えるには、git checkout コマンドを使用します。

あなたは、作業ツリー内のファイルをインデックスから取得して、そのファイルを置き換える方法として、既に checkout を目にしています。 引数リストにパスがない場合、checkout では、作業ツリーとインデックス内の "すべて" を更新し、指定されたコミット (この場合はブランチの先頭) に一致するようにします。

ブランチのマージ (git merge)

ブランチでの機能やバグ修正などの何らかの作業が完了したら、そのブランチを "マージ" してメイン ブランチに戻す必要があります。 特定のブランチを現在のブランチにマージするには、git merge コマンドを使用します。

たとえば、my-feature という名前のブランチで作業していた場合、ワークフローは次のようになります。

# Switch back to the main branch
git checkout main

# Merge my-feature branch into main
git merge my-feature

これらのコマンドを使用して、"マージの競合" (マージ競合については、このモジュールで後ほど説明します) を解決すると、my-feature ブランチのすべての変更が main に含まれます。