2 中級 約 30 分

ブランチとマージの練習

ブランチの作成・切り替え・マージを演習問題で学びます。コンフリクトの解決方法も練習します。

このチュートリアルでは、Git のブランチ機能を使った開発フローを演習形式で学びます。ブランチを使うと、本流の変更に影響を与えずに新機能を開発できます。

準備

前のチュートリアルで作成した my-first-repo ディレクトリに移動するか、新しいリポジトリを作成してください。

cd my-first-repo
# または
mkdir branch-practice && cd branch-practice && git init
echo "# Branch Practice" > README.md
git add README.md
git commit -m "初期コミット"

演習 1:ブランチを作成して切り替える

新機能の開発用ブランチを作成してください。

問題: feature/greeting という名前のブランチを作成し、そのブランチに切り替えるコマンドを書いてください。

答えを見る
# 方法 1: 2つのコマンド
git branch feature/greeting
git checkout feature/greeting

# 方法 2: 1つのコマンド(推奨)
git checkout -b feature/greeting

# 方法 3: git switch を使う(Git 2.23 以降・推奨)
git switch -c feature/greeting

Switched to a new branch 'feature/greeting' と表示されれば成功です。


演習 2:ブランチで変更を加えてコミットする

feature/greeting ブランチで新しいファイルを作成し、コミットしてください。

問題: greeting.txt を作成し、こんにちは、World! という内容を書いてコミットしてください。

答えを見る
echo "こんにちは、World!" > greeting.txt
git add greeting.txt
git commit -m "挨拶ファイルを追加"

演習 3:ブランチを確認する

現在のブランチ状況を確認してください。

問題: すべてのブランチを表示するコマンドを書いてください。現在いるブランチにはどのようなマークが付きますか?

答えを見る
git branch

出力例:

* feature/greeting
  main

現在いるブランチには *(アスタリスク)が付きます。


演習 4:main ブランチに戻り、変更を確認する

main ブランチに切り替え、greeting.txt がないことを確認してください。

問題: main ブランチに切り替えるコマンドを書き、その後ファイルの一覧を確認してください。greeting.txt はどうなっていますか?

答えを見る
git switch main
ls

greeting.txt が表示されないことを確認できます。これはブランチが切り替わることで、作業ツリーも main ブランチの状態(greeting.txt がない状態)に戻るためです。


演習 5:ブランチをマージする

feature/greeting ブランチの変更を main ブランチに取り込んでください。

問題: main ブランチにいる状態で、feature/greeting ブランチをマージするコマンドを書いてください。

答えを見る
git merge feature/greeting

出力例:

Updating a1b2c3d..f4e5d6c
Fast-forward
 greeting.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 greeting.txt

Fast-forward は、main に独自のコミットがないため、ポインタを移動するだけでマージが完了したことを示します。


演習 6:コンフリクトを解決する

意図的にコンフリクトを発生させて、解決する練習をします。

手順:

  1. main ブランチで README.md を編集してコミット
  2. 新しいブランチ feature/readme-update を作成して README.md を別の内容で編集してコミット
  3. main にマージしてコンフリクトを解決
# ステップ 1: main で README.md を変更
echo "# メインブランチの説明" > README.md
git add README.md
git commit -m "README: メインブランチから更新"

# ステップ 2: 新しいブランチを作り、同じファイルを変更
git switch -c feature/readme-update main~1  # 1つ前のコミットから分岐
echo "# フィーチャーブランチの説明" > README.md
git add README.md
git commit -m "README: フィーチャーブランチから更新"

# ステップ 3: main に戻ってマージ
git switch main
git merge feature/readme-update
# CONFLICT が発生!

問題: コンフリクトが発生した README.md を編集して解決し、マージを完了させてください。

答えを見る

コンフリクトが発生したファイルには以下のようなマーカーが挿入されます。

<<<<<<< HEAD
# メインブランチの説明
=======
# フィーチャーブランチの説明
>>>>>>> feature/readme-update
  1. エディタでマーカーを削除し、残したい内容に編集します。
  2. 編集後に git addgit commit でマージを完了します。
# README.md を編集(マーカーを削除してどちらかの内容に統一)
git add README.md
git commit  # マージコミットのメッセージが自動入力される

まとめ

このチュートリアルで学んだブランチ操作:

git branch <name>       ← ブランチを作成
git switch <name>       ← ブランチを切り替え
git switch -c <name>    ← 作成と切り替えを同時に
git merge <branch>      ← ブランチをマージ
git branch              ← ブランチ一覧を確認

ブランチを活用することで、複数の機能を並行して安全に開発できます。