【Git2026 #6】座学&演習 Gitのブランチについて

この演習のゴール
ブランチの概念を理解している
ブランチを作成できる
ブランチを切り替えできる
ブランチをマージでる

座学

ブランチとは

  • 開発の本流から分岐し、本流の開発と切り離した状態で作業ができる機能のこと
    • コミット履歴を分岐させることができる
  • 他の開発者に影響なく作業を行える
  • 機能単位・改修単位で作業を分割できる
    • 改修が終われば本流に合流させることができる

ブランチ運用について

よくある例

Image in a image block
  1. 本番稼働用のmainブランチ(以前はmasterという名前が主流だったが、現在はmainが標準)
  2. 開発環境用のdevelopブランチ
  3. 機能追加用のfeatureブランチ

developがないときもある。チームによって運用や思想が異なる。

一般化されたブランチ戦略として git-flow や github-flow と呼ばれるものがある。

主要な操作

ブランチ一覧を表示
Image in a image block
CLI操作の場合
⌨️
$ git branch
*  main

リモートも含めて表示する場合は -aオプション

git branch -a
  • VSCodeの場合は左下の図中赤い四角で囲まれた部分をクリックすると確認できる
Image in a image block
Image in a image block
ブランチを作成
Image in a image block
CLI操作の場合
⌨️
Image in a image block

git branch <ブランチ名> でブランチを作成できる

$ git branch develop
$ git branch
   develop
*  main
VSCodeでの作成方法①
  • 左下の赤い四角で囲まれた部分(今いるブランチ名)をクリック
    Image in a image block
  • 上にメニューが出て来るので「新しいブランチの作成」をクリック
    Image in a image block
  • ブランチ名を入力
    Image in a image block
VSCodeでの作成方法②
  • 「・・・」を押すと出て来るメニューから「ブランチ」→「分岐の作成」
    Image in a image block
  • ブランチ名を入力
Image in a image block
ブランチを移動

ブランチに移動することで、コミットがそのブランチと紐づくようになります。

Image in a image block
CLI操作の場合
⌨️
CLI操作の場合
Image in a image block
$ git checkout develop
Switched to branch 'develop'

or

$ git switch develop
Switched to branch 'develop'
【余談】git switch コマンド
VSCodeの場合
  • 左下の赤い四角で囲まれた部分(今いるブランチ名)をクリック
    Image in a image block
  • 「develop」(移動したいブランチ名)をクリック
    Image in a image block
    • 「develop」に変わってればOK!
      Image in a image block
ブランチを合成(マージ)

現在いるブランチに、ほかのブランチの変更を統合します。

Image in a image block
CLI操作の場合
⌨️
CLI操作の場合
$ git switch main
Switched to branch 'main'
$ git merge develop
Already up to date.
// ↑本来はマージの内容が表示される
Image in a image block
  • git merge <ブランチ名>→これは、今いるブランチ(↑だとmain)に指定したブランチ(develop)を取り込むという意味
VSCodeの場合
  • マージ先のブランチ(main)へ移動
  • 「・・・」から「ブランチ」→「マージ…」をクリック
    Image in a image block
  • マージしたいブランチを選択
    Image in a image block

コンフリクト(変更点の競合)

マージするとき、元となるブランチと取り込むブランチで同じファイルの同じ場所に異なる変更が加えられていると、コンフリクトが発生する。

Image in a image block

どの変更を採用するかを一つ一つ目視確認し指定しなければいけないので、開発でコンフリクトを起こすと対応が必要になる。

Image in a image block

研修では「チームで GitHub を使う」演習を行った時に実際に試してみました。

スタッシュ

ローカルに、まだコミットしたくない途中の変更がある状態で別のブランチに移りたいとき、そのままでは移動できない場合がある。

  • 移動できない場合
    • feature/A で変更したファイルの同じ箇所が、develop ブランチでも変更されている(競合が発生する場合)。
    ちなみに移動できる場合というのは……
    • feature/A で既存のファイルを変更したが、developブランチでは同じファイルが変更されていない(または同じ箇所が変更されていない)

こういうときにいったん変更をしまっておく(= stash)ことで別のブランチに移動できる。

別のブランチで作業を終えたら元のブランチに戻って、しまっておいた変更を取り出せる。

まだコミットしていない変更がある状態で別のブランチに移動する際、そのまま移動できてしまう場合でも、基本的にスタッシュ(あるいは、一旦コミットしてしまう)のが良いプラクティスとされている。

実務でよくあるスタッシュの使用例
  • 現在、feature/Aというブランチで作業しているが、先にfeature/Bブランチのレビューしてほしいと依頼された → その場合、一度feature/Aの変更をスタッシュした上でfeature/Bに移動する必要がある

演習

実際にブランチを触ってみる

1.今いるブランチを確認する
⌨️
CLI操作の場合
$ git branch
*main

VSCodeの場合は画像の赤枠を確認

Image in a image block
2.developブランチを作る
CLI操作の場合
⌨️
CLI操作の場合
$ git branch develop
$ git branch
  develop
* main

↓ お好みで(個人的には①をよく使う)

VSCodeでの作成方法①
  • 左下の赤い四角で囲まれた部分(今いるブランチ名)をクリック
    Image in a image block
  • 上にメニューが出て来るので「新しいブランチの作成」をクリック
    Image in a image block
  • ブランチ名(developと入力)を入力
    Image in a image block
VSCodeでの作成方法②
  • 「・・・」を押すと出て来るメニューから「ブランチ」→「ブランチの作成…」
Image in a image block
  • ブランチ名(developと入力)を入力
Image in a image block
3.developブランチに移動する
CLI操作の場合
⌨️
CLI操作の場合
$ git switch develop
Switched to branch 'develop'
  • VSCodeなら左下ボタンから「develop」へ移動(自動的に移動しているかも)
4.developブランチで修正を加えてコミットする
  1. 📄Arrow icon of a page link【Git2026 #5】座学&演習 ローカルでGitを使ってみようで作成したindex.htmlを修正する
  • (titleタグの中身をhogehogeに修正)
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>hogehoge</title>
</head>
<body>

</body>
</html>
  1. git diffで差分を確認できる。-が削除箇所、+が追加箇所
CLI操作の場合
⌨️
CLI操作の場合
$ git diff
 <html lang="ja">
 <head>
 <meta charset="utf-8">
- <title>hoge</title>
+ <title>hogehoge</title>
 </head>
 <body>
  • コミットの画面で、ファイルをクリックすると差分が見れる
  • commitする前にdiffで差分を確認する癖をつけましょう!
    Image in a image block
  1. コミットする
CLI操作の場合
⌨️
CLI操作の場合
$ git add index.html
$ git commit -m "titleを変更"

+を押してステージングした後に、「コミット」をクリックする。

Image in a image block
5.mainブランチに戻って確認

mainブランチにはdevelopブランチでのコミット内容は反映されていないはず。

CLI操作の場合
⌨️
CLI操作の場合
$ git switch main
$ cat index.html
  • 左下を押してmainブランチに戻ってみよう
    • 他のブランチと切り離した状態で作業ができるため、他の開発者に影響なく作業を行える

Image in a image block
6.developブランチの内容を合流させる(マージする)
CLI操作の場合
⌨️
CLI操作の場合
$ git merge develop
Updating 0eb63b2..934ce8f
Fast-forward
 index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  1. 「・・・」から「ブランチ」→「マージ…」をクリック
    Image in a image block
  2. develop を選択

    今回のマージ元のブランチはdevelop、マージ先のブランチはmainとなる

    Image in a image block

もう一度index.htmlを見ると変更が反映されている(titleタグにhogehogeが入っている)。

$ cat index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>hogehoge</title>
</head>
<body>

</body>
</html>
7.featureブランチを作る

developブランチから派生するfeature/Aブランチを作る。

CLI操作の場合
⌨️
CLI操作の場合
$ git switch develop
$ git branch feature/A
  • 左下のボタンから「新しいブランチを以下から作成…」をクリック
    Image in a image block
    • 作成元を選択するように言われるので「develop」を選択
    • ブランチ名として「feature/A」を入力
    Image in a image block
8.feature/Aに移動してテキストの中身を変更してみる
CLI操作の場合
⌨️
CLI操作の場合

feature/Aに移動

$ git switch feature/A
  • 左下が「feature/A」になっていることを確認
    Image in a image block
    • 「feature/A」じゃなかったらクリックして移動
  • titleタグの中身をfeature/Aに変更
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>feature/A</title>
</head>
<body>

</body>
</html>
9.変更内容を確認
CLI操作の場合
⌨️
CLI操作の場合
$ git diff
 <html lang="ja">
 <head>
 <meta charset="utf-8">
- <title>hogehoge</title>
+ <title>feature/A</title>
 </head>
 <body>
  • ファイルをクリックして差分を確認
Image in a image block

この状態で main などに移動しようとすると、feature/Aでの変更内容がmainに持ち込まれてしまう。

10.git stashで変更内容を一時的に退避する
CLI操作の場合
⌨️
CLI操作の場合
  • git stash saveで退避させる
    $ git stash save "stash message"
  • git stash listで退避させた内容を確認
    $ git stash list
    stash@{0}: On A: stash massage
  • 「・・・」から「スタッシュ」→「スタッシュ」
    Image in a image block
  • 内容を記入
    • 後からわかるような内容にしよう!(戒め)
    Image in a image block
  • 変更が消えている
    Image in a image block
11.退避したものを戻す
CLI操作の場合
⌨️
CLI操作の場合

git stash apply スタッシュ名でスタッシュしたものを戻す

$ git stash apply stash@{0}

差分を確認

$ git diff
 <html lang="ja">
 <head>
 <meta charset="utf-8">
- <title>hogehoge</title>
+ <title>feature/A</title>
 </head>git diffgit
 <body>
  • 今度は「スタッシュを適用…」をクリック
    Image in a image block
  • 適用したいものを選択する
    Image in a image block
    • index.htmlの変更が元に戻っていればOK!
マージの挙動について

マージには、「fast-forwardマージ」と「non fast-forwardマージ」があります。今回のハンズオンでのマージは、前者の「fast-forwardマージ」に当たります。

ブランチを作成した後、マージまでに作成元ブランチに一切変更がない場合、「作成したブランチの最新コミットを、作成元ブランチでの最新コミットとする」ことでマージを完了します。これが「fast-forwardマージ」です。

Image in a image block

一方、ブランチを作成した後に、作成元ブランチに変更があった場合、「マージコミット」が作成され、それぞれでの変更が統合されます。これが「non fast-forwardマージ(3-way mergeとも言います)」です。

Image in a image block