Gitでブランチを作成する方法を学びましょう。
ブランチとは?
ソフトウェア開発では、複数の機能や修正を同時に進めることがよくあります。
それはひとりの開発者でも、複数の開発者がいるチームでも同じです。
また複数のバージョンを同時に開発することもあります。
つまり複数の開発を同時並行して行わなければならない状況が発生します。
そこでGitではブランチという機能で、同時並行して行う開発を支援するための仕組みを提供しています。
ブランチとは日本語で「枝」という意味です。
Gitでは、リポジトリの状態を「枝分かれ」させて、異なる開発を同時に進めることができます。
次の図では、main
ブランチからfeature/1
とhotfix/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
ディレクトリをカレントディレクトリにして、次のコマンドを実行します。
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
ブランチを切り替える
ブランチを作成しただけでは、まだそのブランチに切り替わっていません。
ブランチを切り替えないと、そのブランチでの作業を行うことができません。
ブランチを切り替えるには、次のコマンドを実行します。
git switch add-readme
このコマンドを実行すると、add-readme
ブランチに切り替わります。
ブランチを確認する
ブランチを確認するには、次のコマンドを実行します。
git branch
ブランチの一覧と現在のブランチが表示されます。
現在のブランチはブランチ名の左に*
が付いています。
git branch* add-readme main
ブランチをシェルのプロンプトに表示する
毎回git branch
コマンドを実行してブランチを確認するのは面倒です。
ブランチを切り替えたことを確認するために、シェルのプロンプトに現在のブランチ名を表示するように設定しましょう。
シェルのプロンプトにブランチ名を表示することで、現在どのブランチで作業しているかを簡単に確認できます。
Bashの場合
シェルのプロンプトにブランチ名を表示するには、~/.bashrc
ファイルを編集します。
bashを使用している場合は、次のように~/.bashrc
ファイルに設定を追加します。
export GIT_PS1_SHOWDIRTYSTATE=1export PS1='\w$(__git_ps1 " (%s)")\$ '
変更したら設定を反映させましょう。
source ~/.bashrc
Zshの場合
MacやLinuxでZshを使用している場合は、次のように~/.zshrc
ファイルに設定を追加します。
autoload -Uz vcs_infoprecmd_vcs_info() { vcs_info }precmd_functions+=( precmd_vcs_info )setopt prompt_substRPROMPT=\$vcs_info_msg_0_# PROMPT=\$vcs_info_msg_0_'%# 'zstyle ':vcs_info:git:*' formats '%b'
変更したら設定を反映させましょう。
source ~/.zshrc
シェルのプロンプトにブランチ名が表示されるか確認する
次のように表示されれば、ブランチ名がシェルのプロンプトに表示されています。
git-practice (add-readme)$
README.mdファイルを追加する
では、README.md
ファイルを追加してみましょう。
echo "# Git Practice" > README.md
次に、README.md
ファイルをGitに追加してコミットします。
git add README.mdgit 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
ブランチに切り替えます。
ブランチを切り替えるには、次のコマンドを実行します。
git switch main
次に、add-readme
ブランチをmain
ブランチにマージします。
マージするにはgit merge
コマンドを使用します。
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
というコミットが追加されていることがわかります。
git log --onelinefb9e6df (HEAD -> main, add-readme) Add README.mdf38acd1 (origin/main) あいさつを追加0884929 newfile.txtを追加a6ab34c hello.txtを追加
ブランチを削除する
ブランチをマージして、もうそのブランチでの作業が不要になった場合は、
ブランチを削除することができます。
ブランチを削除するには、次のコマンドを実行します。
-d
(—delete)オプションを指定します。
git branch -d add-readme
ブランチの一覧を確認すると、add-readme
ブランチが削除されていることがわかります。
git branch* main
変更をリモートリポジトリにプッシュする
mainブランチの状態が変更されているので、リモートリポジトリにプッシュします。
リモートリポジトリにプッシュするには、次のコマンドを実行します。
git push origin main
これで、リモートリポジトリのmain
ブランチがローカルのmain
ブランチと同期されます。