🎯 最終演習

Gitでブランチを切ってマージするまでを通しでやってみよう(総合演習)

ここまでの Git レッスンで学んだコマンドをひとつの流れにつないで、実務そのままの手順を最後までやり切ります

やることは「ブランチを切る → 作業をコミットする → mainに戻ってマージする」。チーム開発で毎日繰り返される、いちばん基本の型です。この流れが手に馴染んでいるかどうかで、仕事の入り方がまるで変わります

ページの一番下に本物の疑似ターミナルがあります。読むだけで終わらせず、必ず自分で打ってみてください。状態はコマンドをまたいで続くので、上から順に打てばそのまま完走できます。

完成イメージ

最後まで進むと、こう表示されるところまで作ります。下の実行結果は、このページを作るときに実際にコードを走らせて得たものです。

$ git log --oneline
a860414 プロフィール欄を追加
$ git branch
* main
$ git status
On branch main

nothing to commit, working tree clean

STEP 1リポジトリを用意して状態を見る

🎯 このステップのゴール: git init で管理を始め、git status で今の状態を読む

まずgit initです。そのフォルダを「Gitが見張る場所」に変えるコマンドで、.gitという隠しフォルダが作られます。ここに履歴がすべて入ります。

次がgit statusGitを使ううえで最も打つことになるコマンドです。迷ったらこれを打つ、というくらい基本で、「いまどのブランチにいて、何が変更されていて、何がコミット待ちか」を教えてくれます。

結果を見ると、index.htmlstyle.cssapp.jsの3つがmodified(変更済み)になっています。この演習では、あなたがエディタでこの3つを編集し終えた直後、という想定で始まります(疑似ターミナルにはエディタが無いため、最初から変更済みの状態にしてあります)。

大事なのはGitはまだ何も記録していないということです。変更を見つけてはいるものの、履歴に残すかどうかはこれからあなたが決めます。

打つコマンド
git init
git status
実行結果
$ git init
Initialized empty Git repository in /home/user/project/.git/
$ git status
On branch main

Changes not staged for commit:
  modified:   index.html
  modified:   style.css
  modified:   app.js

STEP 2作業用のブランチを切る

🎯 このステップのゴール: mainを汚さずに作業する場所を作り、そこへ移動する

ここがこの演習の肝です。変更をいきなりmainにコミットしてもGitとしては動きますが、実務ではまずやりません

理由はmainが「いつでも動く状態」であるべきだからです。作りかけのものを直接入れてしまうと、他の人がそれを取り込んだ瞬間に壊れます。だから作業ごとに別のブランチを切って、完成してから合流させます

git branch feature/profileで枝を作り、git checkout feature/profileでそこへ移動します。作っただけでは移動しません——ここは最初によく間違えるところです。git checkout -b feature/profileと書けば作成と移動を一度にできます。

ブランチ名のfeature/は慣習です。feature/は新機能、fix/は不具合修正、というように頭に種類を付けておくと一覧が読みやすくなります

git branchで確認すると、*が付いているのが今いるブランチです。

打つコマンド
git branch feature/profile
git checkout feature/profile
git branch
実行結果
$ git branch feature/profile
$ git checkout feature/profile
Switched to branch 'feature/profile'
$ git branch
  main
* feature/profile

STEP 3変更をステージに乗せる

🎯 このステップのゴール: git add で「これをコミットする」と選ぶ

ブランチを移っても変更はついてきますgit statusを打つと、さっきと同じ3ファイルが変更済みのまま見えるはずです。

ここでgit add .を打ちます。.は「今のフォルダ以下すべて」の意味です。

Gitに独特なのがステージ(索引)という考え方です。他の多くのツールは「変更したもの=記録するもの」ですが、Gitは間に一段はさみます。「変更したもの」の中から「今回コミットするもの」を選べるのです。

これのおかげで、5ファイル直したけれど関連する2つだけを先にコミットするといったことができます。コミットを意味のある単位に保てるので、後から履歴を読む人が助かります。

git addのあとgit statusを打つと、表示が「Changes to be committed(コミット予定)」に変わります。ここまで来て初めて、コミットの準備が整った状態です。

打つコマンド
git status
git add .
git status
実行結果
$ git status
On branch feature/profile

Changes not staged for commit:
  modified:   index.html
  modified:   style.css
  modified:   app.js
$ git add .
$ git status
On branch feature/profile

Changes to be committed:
  new file:   index.html
  new file:   style.css
  new file:   app.js

STEP 4コミットして履歴に刻む

🎯 このステップのゴール: メッセージを付けて記録し、git log で確かめる

git commit -m "プロフィール欄を追加"で記録します。ここで初めて履歴に残ります

-mメッセージです。省略するとエディタが開くので、短いものは-mで付けるのが普通です。

メッセージの書き方は、後で効いてきます。「修正」「更新」とだけ書かれた履歴が並んでいても、半年後の自分には何も伝わりません。「何をしたか」が一目で分かる粒度——たとえば「プロフィール欄を追加」——にしておくと、git logがそのまま作業の記録になります。

git log --onelineで履歴を1行ずつ見られます。先頭に出ている7桁の英数字がコミットIDで、この変更のかたまりを指す名前です。あとで「この時点に戻したい」というとき、このIDを使います。

コミットIDは毎回変わります。このページに載っているIDと、あなたが打ったときのIDは一致しません。内容と時刻から作られるものなので、それで正常です。

打つコマンド
git commit -m "プロフィール欄を追加"
git log --oneline
実行結果
$ git commit -m "プロフィール欄を追加"
[feature/profile a860414] プロフィール欄を追加
 3 file(s) changed
$ git log --oneline
a860414 プロフィール欄を追加

STEP 5mainに戻して合流させる

🎯 このステップのゴール: git merge で、作業ブランチの成果をmainに取り込む

作業が終わったのでmainに合流させます。ここで順番が大事です。

まずgit checkout mainで受け入れる側へ移動し、それからgit merge feature/profileを打ちます。マージは「今いるブランチに、指定したブランチを取り込む」動きをするので、移動を忘れると逆向きに取り込んでしまいます。ここはGitで最も間違えやすいところのひとつで、「どっちに取り込むんだっけ」と迷ったら「今いる場所が受け皿」と覚えてください。

マージが済んだらgit log --onelineを打ってみてください。さっきfeature/profileで作ったコミットが、mainの履歴にも現れています。これが合流できたということです。

実務ではこのあとgit pushでリモートに送り、GitHubなどでプルリクエストを出してレビューを受けます。そこまで含めて1本の流れです。

打つコマンド
git checkout main
git merge feature/profile
git log --oneline
実行結果
$ git checkout main
Switched to branch 'main'
$ git merge feature/profile
Merge made by the 'ort' strategy.
feature/profile -> main に統合しました
$ git log --oneline
a860414 プロフィール欄を追加

STEP 6後片付けをして完了

🎯 このステップのゴール: 役目を終えたブランチを削除し、きれいな状態で終える

マージが済んだfeature/profileは、もう役目を終えています。残しておくとブランチ一覧が増えていくだけなので消します。

git branch -d feature/profile-dは delete です。小文字の-dは「マージ済みなら消す」という安全な削除で、まだ合流していないブランチを消そうとするとGitが止めてくれます。大文字の-Dは強制削除で、これは確認なしに消えるので普段は使いません。

最後にgit statusgit branchで締めます。「working tree clean(変更なし)」で、ブランチがmainだけ——これが1つの作業を終えたときのあるべき姿です。

これで完走です。ブランチを切る → コミット → マージ → 片付け。この4つが回せれば、チーム開発の入口は越えています。

ページ下の疑似ターミナルで、ここまでを最初から自分の手で通してみてください。読んで分かるのと打てるのは、別物です。

打つコマンド
git branch -d feature/profile
git branch
git status
実行結果
$ git branch -d feature/profile
Deleted branch feature/profile
$ git branch
* main
$ git status
On branch main

nothing to commit, working tree clean

仕上げ自分で最初から打ってみよう

🎯 このステップのゴール: ここまでの流れを、自分の手で最後まで通す

下は本物の疑似ターミナルです。まっさらな状態から始まるので、STEP1のコマンドから順に打って、マージまで辿り着いてください。読んで分かった気になるのと、自分で打てるのとは別物です。

詰まったら上のステップに戻って構いません。resetと打てば最初からやり直せます。

$

よくある質問

コンフリクト(競合)が起きたらどうするんですか?

同じ行を2人が別々に直していると、Gitはどちらを採用すべきか判断できずコンフリクトになります。ファイルに両方の変更が印付きで書き込まれるので、人間が正しい形に直してからgit addしてgit commitします。

怖がられがちですが、やることは「どちらを残すか決める」だけです。こまめにマージしておくほど、競合は小さくなります

mainに直接コミットしてはいけないんですか?

ひとりで書き捨てのものを作るなら構いません。ただチームで開発するなら避けます。作りかけのものがmainに入ると、それを取り込んだ全員の手元が壊れるからです。

多くの現場ではmainへの直接コミットを設定で禁止し、プルリクエスト経由でしか入れられないようにしています。この演習の流れは、そのまま実務の型です。

コミットIDがページと違います

それで正常です。コミットIDは内容と時刻から計算されるので、打つたびに別のものになります。このページに載っているIDは、生成時に実際に実行して得たものをそのまま載せているだけで、あなたの手元と一致する必要はありません。

🚩 次はこのカテゴリへ

Gitが扱えるようになったら、次はその下にあるコマンドラインです。ファイルを探す、ログを読む、権限を直す——Gitを使う場面では必ず同じ黒い画面を触ることになります。Linuxカテゴリでは、その基本の操作を疑似ターミナルで練習できます。

Linux/シェルのレッスンへ進む
広告スペース(バナー)
広告スペース(記事内)