Git

Git入門#22(リベースしてみよう)

hiromin
hiromin
前回、リベースの仕組みを説明をしてもらったけど、ふんわり理解でした…。
cocomaru
cocomaru
うん^^;言葉で聞いても伝わらないところもあるし、今回から実際に使ってみて理解していきましょう!

リベースしてみよう

こんにちは、cocomaruです。

前回は図でリベースの挙動を確認いただいたかと思いますが、今回は図に沿ってコマンドを打ちながら実践していきましょう。

初期状態を作成する

リベースを行う前に前回の「初期状態」の状態を作っていきましょう。

# リベース学習用の作業ディレクトリを作成 
$ mkdir ~/Desktop/WorkDirRebase

# リベース学習用の作業ディレクトリへ移動 
$ cd ~/Desktop/WorkDirRebase

# リポジトリ作成 
$ git init

# 適当にファイルを作成し、インデックス追加とコミットを行う 
$ touch first.txt
$ git add first.txt
$ git commit -m "first.txtを追加"

# ブランチを作成 
$ git branch feature

# ログを確認 
$ git log --oneline
14962e0 (HEAD -> master, feature) first.txtを追加

各ブランチでコミットを行う

次は各ブランチでコミットを行いましょう。

masterブランチでファイル作成

まずはmasterブランチで「master.txt」を作成してみましょう。

# masterブランチへ移動 
$ git checkout master

# masterブランチでファイル作成・コミット 
$ touch master.txt
$ git add master.txt
$ git commit -m "master.txtを追加"

# ログを確認 
$ git log --oneline
588b172 (HEAD -> master) master.txtを追加
14962e0 (feature) first.txtを追加

masterブランチは図の「Commit2」を指すよう形でコミットが進みました!

featureブランチでファイル作成

次にfeatureブランチでファイルを作成してみます。
ここではmasterブランチとの区別がわかりやすいように「feature.txt」としましょう。

# featureブランチへ移動 
$ git checkout feature

#  
$ touch feature.txt
$ git add feature.txt
$ git commit -m "feature.txtを追加"

# ログを確認 
$ git log --oneline
916a416 (HEAD -> feature) feature.txtを追加
14962e0 first.txtを追加

featureブランチの図の通り、コミットでHEADが1つ進んで、新しいコミット「Commit3」を指すようになりましたね?!

リベースを行う

次はいよいよリベースを行ってみます。

以下のようにfeatureブランチのコミットの親を「masterブランチ」にしつつ、
masterブランチの内容を取り込んでいきます。

git rebase <取り込みたいブランチ> <取り込む元のブランチ>

ではgit rebaseを実行してみましょう。
rebaseは「git rebase master feature」のように実行します。
「feature」を省略した場合、現在チェックアウトしているブランチが適用されます。

# featureブランチに移動 
$ git checkout feature

# masterブランチをリベース 
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: feature.txtを追加

# ログを確認 
$ git log --oneline
6602e40 (HEAD -> feature) feature.txtを追加
588b172 (master) master.txtを追加
14962e0 first.txtを追加

ログを確認するとmasterブランチで作成した内容が追加されたことを確認できましたね?!

masterブランチへfeatureブランチを統合する

featureブランチにはmasterブランチの作業内容が統合された事が確認できましたので、
次にmasterブランチへfeatureブランチの内容を統合させます。

統合したあとの結果は図のようなイメージです。

# masterブランチへ移動 
$ git checkout master

# ログを確認し、featureブランチの内容が統合されていないこと確認 
588b172 (HEAD -> master) master.txtを追加
14962e0 (feature) first.txtを追加

# featureブランチを統合 
$ git merge feature
Updating 588b172..6602e40
Fast-forward # featureブランチでmasterブランチをリベースしたのでFastForwardされた。 
 feature.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 feature.txt

# ログを確認 
$ git log --oneline
6602e40 (HEAD -> master, feature) feature.txtを追加
588b172 master.txtを追加
14962e0 first.txtを追加 

# マージコミットは作成されていない事を確認

さいごに

前回、図で説明させていただいた内容を今回は実践してみましたが如何でしたでしょうか?

リベースを行うと、履歴がきれいになる事は確認できたかと思いますが、
リベースは他にも過去のコミットを削除したり、並べ替えたりと色々とできますので、次回はその辺りに触れてみたいと思います!

ではまた次回もよろしくお願いいたします。