ここまでの回で、commit、push と一通りの Git 操作を体験しました。ただ、今の使い方にはひとつ不安があります。変更はすべて main ブランチに直接コミットしているので、もし書きかけの内容や失敗した修正が混ざると、動いていた状態に戻すのが面倒です。
変更を main から切り離して試す仕組み「ブランチ」を使います。ブランチを使えば、本線を安全に保ったまま自由に実験できます。
この回は、前回まで使った Git リポジトリを VS Code とターミナルで開いている状態を前提に進めます。表示例では git-practice を使いますが、別のフォルダ名で進めている場合は読み替えてください。
この回の成功条件:
- ブランチで作ったコミットが merge 後に
git log --onelineに表示される - 「なぜブランチを使うか」を自分の言葉で説明できる
なぜブランチを使うか
たとえば、memo.txt に新しい内容を追加したいとします。main ブランチに直接コミットすると、うまくいかなかったときに元の状態に戻す作業が必要です。
ブランチを使うと、main の履歴はそのまま残ります。別の枝(ブランチ)で作業し、うまくいったら main に取り込みます。うまくいかなかったらブランチを捨てるだけで済みます。
main: ●───●───●
↘
feature: ●───● ← ここで自由に試す
ブランチは「コミット履歴を枝分かれさせる仕組み」です。チーム開発では、機能ごとにブランチを作って独立に作業するのが一般的です。
ブランチを作って切り替える
VS Code のターミナル(PowerShell)を開き、前回まで使った Git リポジトリのフォルダにいることを確認します。
Get-Location
C:\Users\yourname\git-practice
まず、今いるブランチを確認します。
git branch
* main
* が付いているのが現在のブランチです。
main と master について: Git のバージョンや設定によってデフォルトブランチ名が
masterになる場合があります。表示がmasterでも操作は同じです。以降の説明ではmainで進めます。
新しいブランチ add-greeting を作り、同時に切り替えます。
git switch -c add-greeting
Switched to a new branch 'add-greeting'
git switch -c は「ブランチを作って(-c = create)切り替える」コマンドです。
確認します。
git branch
* add-greeting
main
これで add-greeting ブランチに切り替わりました。
switch と checkout: 古い資料では
git checkout -bと書かれていることがあります。git switchは Git 2.23 で追加された新しいコマンドで、ブランチ切り替え専用です。できるだけgit switchを使いましょう。
ブランチ上で変更してコミットする
add-greeting ブランチにいる状態で、memo.txt を編集します。VS Code で memo.txt を開き、内容を次のように書き換えます。
Git の練習メモ
CLI から変更を確認する練習
ブランチの練習中
3行目「ブランチの練習中」を追加しました。
ファイルを保存し、ターミナルで変更を確認します。
git status
On branch add-greeting
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
modified: memo.txt
On branch add-greeting と表示されていることを確認してください。main ではありません。
ステージしてコミットします。
git add memo.txt
git commit -m "ブランチ練習の行を追加"
[add-greeting xxxxxxx] ブランチ練習の行を追加
1 file changed, 1 insertion(+)
このコミットは add-greeting ブランチにだけ記録されています。main には影響しません。
main に戻って merge する
変更がうまくいったので、main ブランチに取り込みます。
main に切り替えます。
git switch main
Switched to branch 'main'
この時点で memo.txt を開くと、3行目「ブランチの練習中」がまだありません。main はまだ変更前のままです。
では、add-greeting ブランチの変更を main に取り込みます。
git merge add-greeting
Updating xxxxxxx..xxxxxxx
Fast-forward
memo.txt | 1 +
1 file changed, 1 insertion(+)
Fast-forward は、main がそのまま add-greeting の先端まで進んだという意味です。ブランチが一直線に伸びていた場合に起きる、もっともシンプルな merge です。main 側でも別の変更がある場合は別の merge 方法になりますが、それは別の回で扱います。
merge 後のログを確認する
git log --oneline
xxxxxxx ブランチ練習の行を追加
xxxxxxx メモをCLI練習用に更新
xxxxxxx メモに練習内容を追記
xxxxxxx 最初のメモを追加
ブランチで作ったコミット「ブランチ練習の行を追加」が main の履歴に入っています。
ここで確認したのはローカルの main の履歴です。GitHub にも反映したい場合は、このあと次のコマンドを実行します。
git push
前回 git push -u origin main を済ませていれば、今回は git push だけで構いません。
merge が済んだブランチは不要なので削除しておきましょう。
git branch -d add-greeting
Deleted branch add-greeting (was xxxxxxx).
-d は、merge 済みのブランチだけを安全に削除するオプションです。merge していない場合はエラーになるので、うっかり消してしまう心配はありません。
よくある詰まり — 今どのブランチにいるか分からない
作業中に「あれ、今 main だっけ?ブランチだっけ?」と迷ったら、次のコマンドで確認します。
git branch
* が付いているのが現在のブランチです。また、git status の1行目にも On branch ... と表示されます。
ブランチを間違えてコミットしても、まだ push 前なら直せる方法はあります。ここでは git branch か git status で現在のブランチを確認してからコミットする流れを定着させてください。
この回のまとめ
| 操作 | コマンド |
|---|---|
| ブランチ一覧を見る | git branch |
| ブランチを作って切り替える | git switch -c ブランチ名 |
| ブランチを切り替える | git switch ブランチ名 |
| ブランチの変更を取り込む | git merge ブランチ名 |
| merge 済みのブランチを削除する | git branch -d ブランチ名 |
ポイント:
- ブランチは「本線を安全に保ったまま変更を試す仕組み」
- コミットする前に
git branchで今いるブランチを確認する - merge が済んだブランチは
git branch -dで削除してよい - GitHub にも反映したいときは merge のあとに
git pushを実行する
commit、push、branch の3つがそろうと、どこで何を変えたかをあとから追えるようになります。
次の回へ
次は、ブランチどうしで同じ行を変更したときに起きる コンフリクト(conflict) を読んで直す練習をします。その前に、日々の学習では次の 3 つを使ってください。
- 変更を保存した区切りで
git commitする - GitHub に残したい節目で
git pushする - 新しい試作や大きめの変更は
git switch -cでブランチを切ってから始める
この 3 つができれば、学習中のコードも「どこを変えたか」をあとから追いやすくなります。