[GitBucketで学ぶバージョン管理] #06 - ブランチで実験室をつくろう

前回まででファイルのマネジメント、そしてコミットした変更の履歴を中央のデータベースへ保存する方法までを勉強してきました。

今回はさらにそれらを活用しつつ、ブランチについても勉強していきたいと思います。


ここまでのおさらい

Gitをインストールしてユーザー名とメールアドレスを設定したりしました。中央のデータベースを利用するためにGitBucketをダウンロードしてきました。GitBucketを使うにはコマンドプロンプトやターミナルから「java -jar gitbucket.war」を実行しました。ブラウザからは「http://localhost:8080」でアクセスすると利用することができました。


さいしょはGitBucketにログインしてリポジトリをつくりましたね。そしてそれをPCの任意のフォルダへ複製してきました。複製には「git clone」コマンドを実行しました。次にファイルを追加したり更新しました。そして、そうした変更はリポジトリへ履歴として保存するために舞台へあげる必要がありました。舞台へあげるのは「git add」コマンドでしたよね。一度舞台へあげたファイルへその後どんな変更をしたかを確認するときには「git diff」を使いました。


舞台へあげられた変更をリポジトリへ保存するには「git commit」コマンドを実行しました。メッセージをつけることもできましたよね。保存した履歴は「git log」で確認することができました。


こうして履歴を保存したリポジトリはPCのディスクが破損するなどすると、すべてが失われてしまう可能性があります。そこでバックアップとしてGitBucketにアップロードしました。アップロードするには「git push」コマンドを実行しました。どこへアップロードするかはURLのショートカットとして登録することができ、その内容を確認するには「git remote」を利用しました。そして何をアップロードするか、現在のブランチが何なのかを確認するために「git branch」を利用しました。


ここまで大丈夫でしょうか?もし「えーと…」となるようでしたらここまでの回をもう一度読んでいただいてもいいでしょう。といっても、このあとほぼすべて登場しますが。


自分だけの実験室

こうして中央のデータベースへバックアップされ、メンバーで共有することになったリポジトリがあったとしましょう。場合によってはウェブなどで公開するような公式なものだったとします。でも、ふと思ったりするわけです。


「あれってこうしたらもっとよくないか…?」


試してみたいのですが、masterに変更を加えて勝手にGitBucketの内容を更新してしまうと大変なことになります。メンバーだけでなく、あなたの実験にみんなが巻き込まれてしまいます。そうしたときにGitはあなただけの実験室をつくる機能を提供しています。これがブランチです。


ブランチをつくろう

さて、あなたの手元のPCはGitBucketにあるリポジトリと同じ、最新です。この状態からちょっと手を加えてどうなるか確認してみたいとします。まずはmyrepoへ移動して、「git branch」を実行してみます。

* master

はい、間違いなくmasterですね。ではここからあなただけの実験室を用意することにします。用意の仕方は、たったいま利用した「git branch」コマンドを使います。「な、なんだってーーー!?」と大きなリアクションをしてくださった方はありがとうございます…


「git branch」コマンドはオプションを付けることでさらに複雑な働きをします。これは「branch」に限ったことではなく、他のコマンドでもそうです。ではあなただけの実験室、「test1」ブランチをつくりましょう。以下のコマンドを実行します。

git branch test1 master

何も表示されませんよね。では「git branch」コマンドを実行して「test1」ブランチができているか確認してみましょう。

* master
  test1

おおーっ、できていますね。ところで、なぜに「test1」?もちろん、実験が一度でうまくいくとは限りませんので…ブランチはうまくできているようなので実験室へ入ってみたいと思います。利用するブランチを切り替えるには「git checkout」コマンドを実行します。

git checkout test1

実行するとメッセージが表示されましたよね?

Switched to branch 'test1'

「ブランチtest1へ切り替えました」とのことです。やりました。これで「git branch」してみてください。実験室にいることがわかると思います。

  master
* test1

どうでしょう、実験室に引きこもることができたでしょうか?


実験をはじめよう

実験室に無事に入ることができたら、あたりを見回してみることにします。masterブランチを元につくられた部屋です。きっと同じような感じになっているはずです。ということは…ということで「git log」してみてください。

commit 1f1d90e3236100af22d2e07993daa2fad2a592cb
Author: m0t0k1 <motoki8791@gmail.com>
Date: Tue Mar 1 11:05:24 2016 +0900
first commit.

this is my first commit.

commit b4cca8a8ae8fc78e07367924c1215354637adddb

Author: nalulabo <nalu.labo@gmail.com>

Date: Mon Feb 29 11:33:42 2016 +0900

Initial commit

おお!masterのコミット履歴とまったく同じではありませんか!いえ、白々しいですね…気にしないでください。それはそのはずです。全く同じになっているはずですから。そうするともちろんファイルの様子も全く同じになっています。もちろん、ワーキングディレクトリも最新の状態になっていますよ。では実験をはじめましょう。「second.html」をつくってみましょう。

<!doctype html>
<html lang="ja">
<head><title>second</title></head>
<body><h1>this is Experiment!</h1></body>

</html>

保存したらさっそく「git add」しましょう。

git add second.html

舞台にあがったでしょうか?「git status」で確認してみてください。

On branch test1
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: second.html

ブランチがtest1になっていますし、舞台上に「second.html」もいるようです。

ではコミットしておきましょう。

git commit -m "this is experimental commit."

履歴が保存されたか確認してみてください。「git log」でしたよね。

commit 32095166de1ba971fae4e0c67e08cba848c5092d
Author: m0t0k1 <motoki8791@gmail.com>
Date: Thu Mar 3 11:01:13 2016 +0900
this is exprerimental commit.

commit 1f1d90e3236100af22d2e07993daa2fad2a592cb

Author: m0t0k1 <motoki8791@gmail.com>

Date: Tue Mar 1 11:05:24 2016 +0900

first commit.

this is my first commit.

commit b4cca8a8ae8fc78e07367924c1215354637adddb

Author: nalulabo <nalu.labo@gmail.com>

Date: Mon Feb 29 11:33:42 2016 +0900

Initial commit

2つだったコミットの履歴が3つになっています。無事に「実験用のファイル追加」という変更が保存されました。


実験室とmasterとの関係

実験室では「second.html」というファイルを追加しました。これはあくまでも実験です。では現在、リポジトリはどういう形になっているのでしょうか?こちらの図を見てください。

「git log」で「commit」というキーワードのあとに並んでいる英数字の羅列でそれぞれのコミット履歴をそれぞれのブランチに線上に置いていくと、このようになります。「test1」は「master」を元に複製されたようなかたちになっているのですが、そうやってつくられた「test1」ブランチに変更を加えてコミットしたので「master」ブランチと比較するとひとつ進んでいる状態になります。

こうしてみると、「支流」というのが川の流れのようでわかりやすいと思います。


また、前回のバックアップをしたときに覚えていらっしゃる方は「ブランチを選択して」アップロードしたことを思い出したのではないでしょうか?この実験用ブランチ「test1」もGitリポジトリのブランチである以上はGitBucketへバックアップすることができます。例えば、実験の結果がすごく良くて「メンバーにもこの変更を実際に使うことにしたらどうだろう」というときに見てもらいやすい(レビューしてもらいやすい)と思います。ではせっかくですからアップロードしておきましょう。

git push origin test1

うまくいったらGitBucketのmyrepoページを見てください。コミット数のほか、ブランチ数が増えています。

これだけですと、「何が変わったんだろう?」と思ってしまうので、「branch: master」と表示されているプルダウンの左隣にある緑色のボタンをクリックしてみてください。

すると、何やら変わったページが表示されます。

これはブランチ同士で何が違うのかを表示してくれるページになっています。まったく同じ内容が表示された2つプルダウンがページ上部にあると思いますので、試しに右側のプルダウンを選択して「test1」を選択してみてください。

するとどうでしょうか?今度は実験用のブランチ「test1」で追加したファイルが違いとして表示されたと思います。

緑色のボタンには「Create pull request」とあり、その右側にはメッセージとして「Discuss and review the changes in this comparison with others.」とあります。

つまりは「変更内容について議論したりレビューしたりしてね」ということです。

これによって、メンバーはあなたの実験結果を議論したりレビューすることができるのです。


最後に

今回はおさらいをしつつブランチで実験室をつくることについてお話ししました。

次回は今回行った実験的な変更をどうしていくかについてお話ししたいと思います。

もんが(なるーらぼ)

個人でプログラミングの学習サイト「なるーらぼ」を運営しています。
https://nalu-labo.amebaownd.com
PowerShell入門の電子書籍2冊も出版しています。
http://www.amazon.co.jp/dp/B017LJOCJ2

なるーらぼ

ごく自然にプログラミングを楽しむことができる世界をつくるお手伝いをしています

0コメント

  • 1000 / 1000