Git ブランチの基本操作

GitBeginner
オンラインで実践に進む

はじめに

お帰りなさい、タイムトラベラー!今回は、Git ブランチを使って、あなたのタイムトラベル・スキルを次のレベルへと引き上げましょう!

メインのタイムライン(本番環境)を台無しにすることなく、突飛なアイデアを試せる「並行世界」をプロジェクトの中に作れるとしたらどうでしょう?それこそが、Git ブランチ(Branch)が可能にすることです!ブランチはコードにおけるパラレルワールドのようなもので、新しい機能の開発、バグ修正、あるいは大胆な実験を、恐れることなく自由に行うことができます。

この実験が終わる頃には、あなたはマルチバース(多次元宇宙)のマスターとなり、新しい現実(ブランチ)の作成、それらの間の移動(チェックアウトまたはスイッチ)、統合(マージ)、そして不要になった世界の削除まで自由自在に操れるようになります。これらのスーパーパワーは、一人で作業する場合でも、次元を飛び越える開発チームの一員として作業する場合でも、タイムトラベルを行う開発者にとって不可欠なスキルです。

Git ブランチの魔術師になる準備はできましたか?さあ、始めましょう!

マルチバース・ハブのセットアップ

まず、すべての並行世界の中心となるハブを作成する必要があります。これがメインの Git リポジトリになります。

  1. ターミナルを開きます。これは次元間をジャンプするためのコントロールパネルです。

  2. プロジェクトスペースに移動します:

cd ~/project

このコマンドは、現在のディレクトリをホームディレクトリ内の "project" フォルダに変更します。自分の居場所がわからなくなったときは、pwd コマンドを使って現在の作業ディレクトリを表示できます。これはターミナルで迷子になったときに役立つ便利なテクニックです。

  1. マルチバースの実験用に新しいフォルダを作成しましょう:
mkdir git-branch-lab
cd git-branch-lab

mkdir コマンドで新しいディレクトリを作成し、cd でその中に入ります。これで、まっさらな状態で作業を始められます。この新しいフォルダを、タイムトラベル作戦の司令室だと考えてください。

  1. 次に、ハブ(Git リポジトリ)を初期化します:
git init

このコマンドは、現在のディレクトリに新しい Git リポジトリを作成します。Git がプロジェクトの追跡を開始するために必要なすべてのファイルがセットアップされます。これらのファイルは .git という隠しフォルダに保存されます。

次のようなメッセージが表示されるはずです:

Initialized empty Git repository in /home/labex/project/git-branch-lab/.git/

おめでとうございます!無限の可能性を秘めたハブが完成しました。これが、あなたのタイムトラベル・アドベンチャーのすべての基盤となります。

  1. ここがどのような場所かを説明する、未来の自分へのメモを作成しましょう:
echo "## Git Branch Lab" > README.md
echo "This is my hub for multiversal Git branch experiments" >> README.md

これらのコマンドの内容は以下の通りです:

  • 最初のコマンドは README.md という新しいファイルを作成し、その中に "## Git Branch Lab" と書き込みます。Markdown では、'#' 記号は見出しを作成します。このファイルは、マルチバース・ハブの取扱説明書のような役割を果たします。
  • 2 番目のコマンドは、README.md にもう一行追加します。'>>' は「ファイルの末尾に追加する」という意味です。取扱説明書に詳細を書き加えています。

作成した内容を確認したい場合は、cat README.md コマンドでファイルの中身を表示できます。

  1. では、この新しい世界で最初のセーブポイント(コミット)を作成しましょう:
git add README.md
git commit -m "Initial commit: Create the multiverse hub"

詳しく見ていきましょう:

  • git add README.md は、README.md の変更を追跡するように Git に伝えます。これにより、ファイルが「ステージング(Staging)」されます。ステージングとは、旅行の準備を整えるようなものだと考えてください。
  • git commit は、ステージングされた変更を使って新しいコミット(セーブポイント)を作成します。これは、現在の世界のスナップショットを撮るようなものです。
  • -m フラグを使うと、コミットメッセージを直接入力できます。常に明確で説明的なメッセージを書くように心がけましょう!このメッセージは、そのスナップショットで何を変更したかを説明するメモになります。

何がステージングされ、何がコミットされたか確信が持てないときは、git status を使って確認できます。これはタイムトラベル機器の状態をチェックするようなものです。

最初の並行世界の作成

メインの世界(master ブランチ)がセットアップできたので、最初の並行世界を作成してみましょう!

  1. feature-dimension という名前の新しいブランチを作成します:
git branch feature-dimension

このコマンドは新しいブランチを作成しますが、まだそこへは切り替えません。並行世界を新しく作ったものの、自分はまだ元の世界に留まっている状態です。新しい現実の設計図はできましたが、まだ足を踏み入れていないようなものです。

新しいタイムラインを作成しましたが、まだその中にはいません。存在するすべてのタイムラインを確認してみましょう:

git branch

次のように表示されるはずです:

  feature-dimension
* master

* は、現在どの現実にいるかを示しています。今はまだメインの世界(master)にいます。master ブランチは、リポジトリを初期化したときに Git がデフォルトで作成するブランチです。

ヒント:q キーを押すとブランチリストを終了し、ターミナルに戻ります。

  1. では、新しい現実へジャンプしましょう:
git checkout feature-dimension

このコマンドは 2 つのことを行います:

  1. 現在の作業ディレクトリを feature-dimension ブランチに切り替えます。
  2. 作業ディレクトリ内のファイルを feature-dimension ブランチの状態に合わせて更新します。ポータルを通って新しい現実へ足を踏み入れるようなものです。

もう一度 git branch を実行すると、次のように表示されます:

* feature-dimension
  master

* が移動し、新しい次元へのジャンプに成功したことがわかります!あなたは今、この並行世界で作業しています。

代わりに、git switch feature-dimension を使っても同じ結果が得られます。git switch は Git 2.23 で導入された比較的新しいコマンドで、ブランチの切り替え専用に設計されており、より明確で直感的です。どちらのコマンドも同じ目的を果たしますが、一般的には分かりやすい git switch が好まれます。

ファイルにまだ変化が見られなくても心配しないでください。新しいブランチを作成した直後は、元のブランチの正確なコピーから始まります。面白いのは、ここから変更を加え始めたときです!この初期のコピーがあることで、それぞれの現実が同じ基盤からスタートできるのです。

プロのヒント:新しいバージョンの Git では、1 つのコマンドで新しいブランチを作成してジャンプすることができます:git checkout -b feature-dimension または git switch -c feature-dimension。一瞬でポータルを作成して飛び込むようなものです!git checkout-bgit switch-c フラグは、ブランチの作成と切り替えを 1 つのステップに統合します。

自分がどの次元(ブランチ)にいるか忘れてしまったら、いつでも git branch を実行してください。* が付いているブランチが現在の場所です。マルチバースの地図で現在地を確認するようなものです。

新しい現実の形成

新しい次元に到着したので、ここだけに存在する変更を加えていきましょう。ここで何を行っても、マージ(統合)することを決めるまではメインの世界には影響しません。これにより、メインのタイムラインを乱すことなく安全に実験ができます。

  1. この現実で新しいアーティファクト(遺物)を作成しましょう:
echo "This is a powerful artifact from another dimension" > dimensional-artifact.txt

このコマンドは dimensional-artifact.txt という新しいファイルを作成し、メッセージを書き込みます。> 記号は、指定した内容で新しいファイルを作成(または既存のファイルを上書き)するために使用されます。このアーティファクトは、現在の現実に固有のものです。

  1. では、このアーティファクトをタイムラインに保存しましょう:
git add dimensional-artifact.txt
git commit -m "Create a powerful interdimensional artifact"

これらのコマンドはステップ 1 で学習したものと同じです。Git に新しいファイルを追跡させ、説明的なメッセージと共にセーブポイントを作成します。これは、新しく発見されたアーティファクトのスナップショットを撮るようなものです。

  1. この新しい現実について、未来の自分へのメモも更新しておきましょう:
echo "##### Feature Dimension" >> README.md
echo "We've discovered a powerful artifact in this reality" >> README.md

これらのコマンドは README.md ファイルに新しい行を追加します。>> 記号は、上書きではなく既存のファイルの末尾に追記します。新しい次元での発見を反映させるために、取扱説明書を更新しています。

  1. これらの変更も保存します:
git add README.md
git commit -m "Document the discovery of the artifact"

再びセーブポイントを作成します。今回は更新された README.md ファイルのためです。未来の自分のために、更新されたドキュメントを保存しておきます。

素晴らしい!これで並行世界に変更を加えることができました。これらの変更は、現時点では feature-dimension ブランチにのみ存在します。もし master ブランチに戻ったとしても、これらの変更は見当たりません。この分離こそが、ある現実での実験が他に影響を与えないことを保証してくれます。

現在のブランチと master ブランチの違いを確認するには、git diff master コマンドを使用できます。これにより、メインのタイムラインと比較して、現在の現実で加えたすべての変更が表示されます。これは 2 つの世界の状態を比較するようなものです。

現実の統合(マージ)

並行世界で素晴らしい発見ができたので、それをメインの世界に持ち帰る時が来ました。このプロセスを「マージ(Merge)」と呼びます。

  1. まず、メインの現実に戻りましょう:
git checkout master

または

git switch master

どちらのコマンドも master ブランチに切り替えます。

  • git checkout はブランチを切り替えるための古いコマンドです。Git の初期から存在し、現在もサポートされています。
  • git switch は Git 2.23 で導入された新しいコマンドです。より直感的で理解しやすいように設計されています。

どちらを使っても構いませんが、明確さの点から git switch が推奨されます。

今ファイルを確認すると、異次元のアーティファクトが消えていることに気づくでしょう!でも安心してください、それは別の次元に安全に保管されています。これは、ブランチ間の変更がマージされるまで隔離されていることを示しています。

  1. では、並行世界をメインのタイムラインにマージしましょう:
git merge feature-dimension

このコマンドは、feature-dimension のすべての変更を取り込み、master に適用するよう Git に指示します。並行世界での発見をメインの世界に統合するようなものです。

次のようなメッセージが表示されるはずです:

Updating <hash1>..<hash2>
Fast-forward
 README.md              | 2 ++
 dimensional-artifact.txt | 1 +
 2 files changed, 3 insertions(+)
 create mode 100644 dimensional-artifact.txt

この出力は、どのファイルが変更され、何行追加・削除されたかを示しています。「Fast-forward(早送り)」とは、競合する変更がなかったため、Git が単に master ブランチのポインタを feature-dimension がある位置まで進めたことを意味します。ファストフォワード・マージは最も単純なマージ形式で、マージ先のブランチが、マージ元のブランチ作成時から変更されていない場合に発生します。

おめでとうございます!2 つの現実を統合することに成功しました!feature-dimension で加えた変更は、今やメインの世界の一部となりました。異次元のアーティファクトと更新されたドキュメントが、master ブランチに存在しています。

  1. アーティファクトがマージを通過したか確認しましょう:
cat dimensional-artifact.txt
cat README.md

これらのコマンドでファイルの内容を表示します。feature-dimension で加えた変更が表示されるはずです。これでマージが成功したことが確認できました。

並行世界での発見をメインのタイムラインに無事持ち帰ることができました。開発者が新しい機能をメインプロジェクトに取り入れる際も、このように行います!これは Git の中核となる概念であり、開発者が機能を個別に開発し、準備が整った段階でメインのコードベースに統合することを可能にします。

現在のブランチにマージ済みのブランチ一覧を確認したい場合は、git branch --merged コマンドを使用できます。どのブランチが統合済みかを追跡するのに役立ちます。

次元のポータルを閉じる

発見をメインの現実に持ち帰ることに成功したので、もう並行世界へのポータルを閉じてしまっても大丈夫です。Git の用語では、不要になったブランチを削除します。

  1. feature-dimension ポータルを閉じましょう:
git branch -d feature-dimension

-d フラグはブランチを削除するよう Git に指示しますが、完全にマージされている場合にのみ削除を実行します。これは、マージされていない変更を誤って失わないための安全策です。Git は、そのブランチの変更が現在のブランチにマージされている場合にのみ、-d による削除を許可します。

完全にマージされていないブランチを削除しようとすると、Git は警告を出します。そのような場合で、どうしても削除したいことが確実であれば、代わりに -D フラグ(git branch -D feature-dimension)を使用できます。これはマージ状態に関わらず強制的にブランチを削除します。この力を使うときは注意してください!そのブランチの変更が本当に不要であると確信できる場合にのみ使用すべきコマンドです。

  1. どの現実が残っているか確認しましょう:
git branch

今は master ブランチだけが表示されるはずです。これは feature-dimension へのポータルが閉じられたことを示しています。

古いブランチを整理しておくことで、マルチバースを整然と保つことができます。特に多くの並行世界を扱う大規模なプロジェクトでは、不要になった次元へのポータルを閉じる習慣をつけるのが良いでしょう。これによりワークスペースが清潔に保たれ、混乱を防ぐことができます。

リモートブランチを含むすべてのブランチを確認したい場合は、git branch -a を使用します。これは複数の共同作業者がいるプロジェクトで役立ちます。リモートブランチとは、他のリポジトリにあるブランチのコピーのことです。

まとめ

おめでとうございます、マルチバースのマスター!Git ブランチ魔術の集中講座を修了しました。あなたが成し遂げた素晴らしい偉業を振り返ってみましょう:

  1. 無限の可能性を秘めたハブ(新しい Git リポジトリ)を作成しました。
  2. 並行世界へのポータルを開きました(新しいブランチの作成)。
  3. 異なる次元間をジャンプする方法を学びました(git checkout または git switch によるブランチの切り替え)。
  4. 並行世界で画期的な発見をしました(別ブランチでの変更のコミット)。
  5. 2 つの現実を統合し、発見をメインのタイムラインに持ち帰りました(ブランチのマージ)。
  6. 最後に、不要になった次元のポータルを閉じる方法を学びました(ブランチの削除)。

これらのマルチバース・スキルは、タイムトラベルを行うすべての開発者にとって極めて重要です。ブランチを活用することで、以下のことが可能になります:

  • メインのタイムラインを乱すことなく、異なる機能開発やバグ修正を並行世界で同時に進めることができます。
  • 安全な並行世界で、大胆なアイデアを自由に実験できます。
  • 他の次元を旅する開発者たちと、それぞれが自分の現実で作業しながら協力できます。
  • メインのタイムラインを常に安定させ、準備が整った機能だけをマージすることで、不具合のない状態を維持できます。

ハッピー・ディメンション・ホッピング!あなたのマージが常にコンフリクト(衝突)なしでありますように!