連載
» 2016年06月10日 05時00分 UPDATE

こっそり始めるGit/GitHub超入門(3):ポインタ嫌いでも分かるGitブランチの基本――作成、確認、切り替え、masterにマージ、削除 (3/3)

[平屋真吾,クラスメソッド]
前のページへ 1|2|3       

「second」ブランチ上で3つ目のコミットを作る

 「second」ブランチを作成し「second」ブランチに切り替えることができました。「second」ブランチ上で作業をしていきましょう。

 「hello.txt」ファイルに1行追加し、コミットします。

$ echo konnichiwa >> hello.txt
$ git add hello.txt
$ git commit -m "add konnichiwa to hello.txt"
[second 6a2a9e2] add konnichiwa to hello.txt
 1 file changed, 1 insertion(+)
$ git status
On branch second
nothing to commit, working directory clean

 「git log --oneline --decorate」コマンドを実行します。

$ git log --oneline --decorate
d90401a (HEAD -> second) add konnichiwa to hello.txt
8a0afb3 (master) edit hello.txt
8d7430a first commit

 「second」ブランチは、図5では左から3つ目、コマンド実行結果では下から3つ目のコミットを指しています(2行目)。「master」は、そのままです。

図5 コミット後、「second」が左から3つ目のコミットを指している状態 図5 コミット後、「second」が左から3つ目のコミットを指している状態

「second」ブランチを「master」ブランチに「マージ」

 「second」ブランチ上で行った変更を「master」ブランチに反映します。

 あるブランチで行った変更を別のブランチに反映する操作のことを「マージ」と呼びます。「マージ」を行うには「git merge <マージ元のブランチ名>」コマンドを使用します。

「master」ブランチに切り替え

 「git checkout <ブランチ名>」コマンドで、「master」ブランチに切り替えます。

$ git checkout master
Switched to branch 'master'
$ git log --oneline --decorate
8a0afb3 (HEAD -> master) edit hello.txt
8d7430a first commit

 念のため、hello.txtの中身を確認してみます。「second」ブランチ上で追加した1行「konnichiwa」はありません。

$ cat hello.txt
Hello
goodbye
図6 「HEAD」(カレントブランチ)が「master」を指している状態 図6 「HEAD」(カレントブランチ)が「master」を指している状態

ファイルのマージを実行する――git mergeコマンド

 「git merge <ブランチ名>」コマンドを実行します。

$ git merge second
Updating 8a0afb3..d90401a
Fast-forward
 hello.txt | 1 +
 1 file changed, 1 insertion(+)

 「git log --oneline --decorate」コマンドを実行します。

$ git log --oneline --decorate
d90401a (HEAD -> master, second) add konnichiwa to hello.txt
8a0afb3 edit hello.txt
8d7430a first commit

 「master」と「second」ブランチの両方が下から3つ目のコミットを指すようになりました(2行目)。

Fast-forward(早送り)マージとは

 「master」ブランチをマージ前後で比較すると、「master」ブランチが指すコミットが、図7では左から「2つ目」から「3つ目」に変わっただけです。

図7 「master」が指すコミットが左から2つ目から3つ目に移動した状態 図7 「master」が指すコミットが左から2つ目から3つ目に移動した状態

 今回は「master」ブランチはそのままで「second」ブランチだけ履歴が進んだだけなので、「master」ブランチが指すコミットが変わるだけで済みました。このようなマージのことを「Fast-forward(早送り)マージ」と呼びます。

 今回「git checkout <ブランチ名>」コマンドを実行した結果表示されるメッセージに「Fast-forward」と表示されたのは、このためです。

ブランチを削除する――git branchコマンドの「-d」オプション

 「second」ブランチ上で行った変更は「master」ブランチに反映したので、「second」ブランチは削除しても構いません。

 不要になったブランチは「git branch -d <ブランチ名>」コマンドで削除できます。

$ git branch -d second
$ git branch
* master
図8 「second」が削除された状態

本稿で紹介したGitの基本的なコマンド一覧

 ここまでで「ブランチ作成」から「マージ」までの一連の操作を行いました。「ブランチ」についてのイメージをつかむことはできたでしょうか。

 本記事で初めて登場したGitのコマンドは以下の通りです。

  • git branch:ブランチの一覧を表示する
  • git log --oneline --decorate:「ブランチがどのコミットを指しているか」という情報と共にワンラインでコミットログを表示する
  • git checkout <ブランチ名>:ブランチを切り替える
  • git merge <マージ元のブランチ名>:別のブランチをカレントブランチにマージする
  • git branch -d <ブランチ名>:ブランチを削除する

 今回行った一連の操作では片方の「second」ブランチだけで変更を進めたので、変更内容が複数ブランチ間でコンフリクト(衝突)することなく簡単にマージできました。しかし、実際の開発では変更内容がコンフリクトしてしまう場合があります。

 次回は、意図的にコンフリクトが起こるような操作を行って、コンフリクトが起こったときの対処方法を説明します。

参考書籍

  • Pro Git』(written by Scott Chacon and Ben Straub and published by Apress)

著者紹介

平屋真吾

クラスメソッド株式会社 iPhoneアプリサービス事業部所属のプログラマーです。iOSアプリの開発がメインですが、デザインやAWSなども勉強中です。

ブログ:http://dev.classmethod.jp/author/hiraya-shingo/


前のページへ 1|2|3       

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。