ブランチとマージの練習
ブランチの作成・切り替え・マージを演習問題で学びます。コンフリクトの解決方法も練習します。
このチュートリアルでは、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/greetingSwitched 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
lsgreeting.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.txtFast-forward は、main に独自のコミットがないため、ポインタを移動するだけでマージが完了したことを示します。
演習 6:コンフリクトを解決する
意図的にコンフリクトを発生させて、解決する練習をします。
手順:
mainブランチでREADME.mdを編集してコミット- 新しいブランチ
feature/readme-updateを作成してREADME.mdを別の内容で編集してコミット 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- エディタでマーカーを削除し、残したい内容に編集します。
- 編集後に
git addとgit commitでマージを完了します。
# README.md を編集(マーカーを削除してどちらかの内容に統一)
git add README.md
git commit # マージコミットのメッセージが自動入力されるまとめ
このチュートリアルで学んだブランチ操作:
git branch <name> ← ブランチを作成
git switch <name> ← ブランチを切り替え
git switch -c <name> ← 作成と切り替えを同時に
git merge <branch> ← ブランチをマージ
git branch ← ブランチ一覧を確認
ブランチを活用することで、複数の機能を並行して安全に開発できます。