この記事では、Ubuntu18.04LTSにインストールしたGit(version 2.17.1)を使用しています。
ブランチとは
Gitは履歴を管理する際にリリースの状態を保ちつつ、履歴の流れを分岐して記録し同時進行で機能を追加したりバグ修正をしたりするのに便利な機能が「ブランチ」です。
分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。
実際にチームで作業する場合にGitが使われることが多いと思います。その場合はGit flowやGithub flowなどチームごとにルールがあると思うのですが、今回は基本的な操作のみ記述します。
ブランチの確認
まずは、現在のブランチを確認します。
git branch
* master
このリポジトリには、masterブランチが存在し、現在masterブランチで作業していることになります。
ブランチの作成
ブランチを活用する際にはあらかじめルールを決めておくことが重要です。
基本的には統合ブランチとしてmasterブランチをリリース用などに利用し、トピックブランチとして他にブランチを切ってそこで機能追加やバグ修正などの作業をします。
masterブランチとは別にdevブランチを作ってみます。
git branch dev
git branch
dev
* master
devブランチが作成されました。
*(アスタリスク)で、自分がいるブランチはmasterブランチであることが確認できます。
作業ブランチへの移動
ブランチができたら、作業するためにそのブランチに移動してみます。
git checkout dev
git branch
* dev
master
*(アスタリスク)がdevブランチに変わっているのが確認できました。
マージ
トピックブランチを切って作業を進めたあとは、統合ブランチに統合します。
devブランチで、いくつかコミットしておきました。
git log --oneline
c7bb542 (HEAD -> dev) dev.02
38746b8 dev.01
dc65374 (master) sixth commit
08c1848 fifth commit
07dc0ac fourth commit
11c93c0 (tag: ver.0.0.2) third commit
cd4ce0b (tag: ver.0.0.1) second commit
76d180f initial commit
devブランチのコミットがmasterブランチのコミットを追い越しています。
devブランチの内容をmasterブランチにマージしてみます。手順は次のとおりです。
1.masterブランチ(統合ブランチ)に移動する。
git checkout master
2.トピックブランチを統合ブランチにマージする。
git merge dev
git log --oneline
c7bb542 (HEAD -> master, dev) dev.02
38746b8 dev.01
dc65374 sixth commit
08c1848 fifth commit
07dc0ac fourth commit
11c93c0 (tag: ver.0.0.2) third commit
cd4ce0b (tag: ver.0.0.1) second commit
76d180f initial commit
devブランチの内容が、masterブランチに統合されました。
ブランチの削除
ブランチが統合されたことが確認できたら、トピックブランチを削除します。
※ルールによっては必ずしもマージ後に削除するものではないので、注意します。
まずブランチを確認します。
git branch
dev
* master
まだdevブランチが残っているので、削除してみます。
git branch -d dev
git branch
* master
devブランチを削除することができました。
ターミナルにブランチを表示させる
ブランチを使い始めると、現在のブランチの場所をコマンドで確認しながら作業を進めることになります。
私が知っている限りではUbuntuでの方法ですが、「違うブランチで作業をしていた」というようなミスを防ぐためにも、ターミナルに現在のブランチ名を表示させる方法があります。
Ubuntuには、HOMEディレクトリ直下に.bashrcという隠しファイルがあります。
このファイルを開き、その最下行に以下のコードを貼り付けるだけでターミナルのディレクトリ名の隣にGitのブランチを表示させることができます。
# ターミナルにgitブランチを表示させる
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ [\1]/'
}
function promps {
# 色は気分で変えたいかもしれないので変す宣言しておく
local BLUE="\[\e[1;34m\]"
local RED="\[\e[1;31m\]"
local GREEN="\[\e[1;32m\]"
local WHITE="\[\e[00m\]"
local GRAY="\[\e[1;37m\]"
case $TERM in
xterm*) TITLEBAR='\[\e]0;\W\007\]';;
*) TITLEBAR="";;
esac
local BASE="\u@\h"
PS1="${TITLEBAR}${GREEN}${BASE}${WHITE}:${BLUE}\W${GREEN}\$(parse_git_branch)${BLUE}\$${WHITE} "
}
promps