ブランチを作成する

Gitでブランチを作成する方法を学びましょう。

ブランチとは?

ソフトウェア開発では、複数の機能や修正を同時に進めることがよくあります。
それはひとりの開発者でも、複数の開発者がいるチームでも同じです。
また複数のバージョンを同時に開発することもあります。
つまり複数の開発を同時並行して行わなければならない状況が発生します。

そこでGitではブランチという機能で、同時並行して行う開発を支援するための仕組みを提供しています。

ブランチとは日本語で「枝」という意味です。
Gitでは、リポジトリの状態を「枝分かれ」させて、異なる開発を同時に進めることができます。
次の図では、mainブランチからfeature/1hotfix/2という2つのブランチが分岐しています。
たとえば、feature/1ブランチでは新しい機能の開発を行い、hotfix/2ブランチではバグ修正を行うことができます。

gitGraph
  commit
  commit
  branch feature/1
  commit
  commit
  commit
  checkout main
  branch hotfix/2
  checkout hotfix/2
  commit
  commit

ブランチのマージ(統合)

ここまでのレクチャーでも知らずのうちにブランチを使っていました。
Gitリポジトリを作成すると、デフォルトでmainというブランチが作成されます。
(前まではmasterという名前でしたが、現在はmainに変更されています)

mainブランチは、リポジトリのメインの開発を行うためのブランチです。
Gitのブランチの運用方法はプロジェクトによって異なりますが、
例えば顧客に提供や納品するためのコードはmainブランチを使用することが多いです。

ブランチは枝のように分岐させるだけでなく、分岐したブランチを統合することもできます。
ブランチを統合することを「マージ」と呼びます。
マージを行うことで、異なるブランチで行った変更を1つのブランチに統合することができます。
次の図では、feature/1ブランチで機能追加の修正を3コミット行った後に、mainブランチにマージしています。
またhotfix/2ブランチでバグ修正を2コミット行った後に、mainブランチにマージしています。

gitGraph
  commit
  commit
  branch feature/1
  commit
  commit
  commit
  checkout main
  branch hotfix/2
  checkout hotfix/2
  commit
  commit
  checkout main
  merge feature/1
  merge hotfix/2

ブランチの作成方法

では、実際にブランチを作成してみましょう。
今回はREADME.mdというファイルを追加する作業をブランチを用いて行います。
GitHubではREADME.mdというファイルをリポジトリのトップページに表示することができます。

git-practiceディレクトリをカレントディレクトリにして、次のコマンドを実行します。

Terminal window
git branch add-readme

このコマンドは、add-readmeという名前のブランチを作成します。
次の図のような状態になり、add-readmeブランチが作成されます。

gitGraph
  commit id: "hello.txtを追加"
  commit id: "newfile.txtを追加"
  commit id: "あいさつを追加"
  branch add-readme
  checkout add-readme

ブランチを切り替える

ブランチを作成しただけでは、まだそのブランチに切り替わっていません。
ブランチを切り替えないと、そのブランチでの作業を行うことができません。
ブランチを切り替えるには、次のコマンドを実行します。

Terminal window
git switch add-readme

このコマンドを実行すると、add-readmeブランチに切り替わります。

ブランチを確認する

ブランチを確認するには、次のコマンドを実行します。

Terminal window
git branch

ブランチの一覧と現在のブランチが表示されます。
現在のブランチはブランチ名の左に*が付いています。

Terminal window
git branch
* add-readme
main

ブランチをシェルのプロンプトに表示する

毎回git branchコマンドを実行してブランチを確認するのは面倒です。
ブランチを切り替えたことを確認するために、シェルのプロンプトに現在のブランチ名を表示するように設定しましょう。
シェルのプロンプトにブランチ名を表示することで、現在どのブランチで作業しているかを簡単に確認できます。

Bashの場合

シェルのプロンプトにブランチ名を表示するには、~/.bashrcファイルを編集します。

bashを使用している場合は、次のように~/.bashrcファイルに設定を追加します。

~/.bashrc
export GIT_PS1_SHOWDIRTYSTATE=1
export PS1='\w$(__git_ps1 " (%s)")\$ '

変更したら設定を反映させましょう。

Terminal window
source ~/.bashrc

Zshの場合

MacやLinuxでZshを使用している場合は、次のように~/.zshrcファイルに設定を追加します。

~/.zshrc
autoload -Uz vcs_info
precmd_vcs_info() { vcs_info }
precmd_functions+=( precmd_vcs_info )
setopt prompt_subst
RPROMPT=\$vcs_info_msg_0_
# PROMPT=\$vcs_info_msg_0_'%# '
zstyle ':vcs_info:git:*' formats '%b'

変更したら設定を反映させましょう。

Terminal window
source ~/.zshrc

シェルのプロンプトにブランチ名が表示されるか確認する

次のように表示されれば、ブランチ名がシェルのプロンプトに表示されています。

Terminal window
git-practice (add-readme)$

README.mdファイルを追加する

では、README.mdファイルを追加してみましょう。

Terminal window
echo "# Git Practice" > README.md

次に、README.mdファイルをGitに追加してコミットします。

Terminal window
git add README.md
git commit -m "Add README.md"

次のような状態になります。

gitGraph
  commit id: "hello.txtを追加"
  commit id: "newfile.txtを追加"
  commit id: "あいさつを追加"
  branch add-readme
  checkout add-readme
  commit id:"Add README.md"

現在のブランチはadd-readmeブランチです。
add-readmeブランチにAdd README.mdというコミットが追加されました。
現在の作業ブランチではないmainブランチには変更はありません。

ブランチをマージする

ではREADME.mdファイルを追加するという作業が完了したので、
add-readmeブランチをmainブランチにマージ(統合)しましょう。

マージするには、まずマージ先のブランチに切り替える必要があります。
つまりmainブランチに切り替えます。
ブランチを切り替えるには、次のコマンドを実行します。

Terminal window
git switch main

次に、add-readmeブランチをmainブランチにマージします。
マージするにはgit mergeコマンドを使用します。

Terminal window
git merge add-readme

次のような状態になります。
mainブランチにadd-readmeブランチで行った変更がマージ(統合)されました。

gitGraph
  commit id: "hello.txtを追加"
  commit id: "newfile.txtを追加"
  commit id: "あいさつを追加"
  branch add-readme
  checkout add-readme
  commit id:"Add README.md"
  checkout main
  merge add-readme

git logコマンドも確認してみましょう。
mainブランチにAdd README.mdというコミットが追加されていることがわかります。

Terminal window
git log --oneline
fb9e6df (HEAD -> main, add-readme) Add README.md
f38acd1 (origin/main) あいさつを追加
0884929 newfile.txtを追加
a6ab34c hello.txtを追加

ブランチを削除する

ブランチをマージして、もうそのブランチでの作業が不要になった場合は、
ブランチを削除することができます。
ブランチを削除するには、次のコマンドを実行します。
-d(—delete)オプションを指定します。

Terminal window
git branch -d add-readme

ブランチの一覧を確認すると、add-readmeブランチが削除されていることがわかります。

Terminal window
git branch
* main

変更をリモートリポジトリにプッシュする

mainブランチの状態が変更されているので、リモートリポジトリにプッシュします。
リモートリポジトリにプッシュするには、次のコマンドを実行します。

Terminal window
git push origin main

これで、リモートリポジトリのmainブランチがローカルのmainブランチと同期されます。