連載目次:【連載Git目次】ほんとは簡単?SourceTreeでGitを始めよう!
前回:【連載Git 第2回】まずは試しに使ってみよう
前回まででGitの基本機能
- ファイルの登録(コミット)
- 過去に戻す(チェックアウト)
について覚えました。
今回はさらにGitが便利になるブランチというものを使ってみましょう。
ブランチを切ってみよう
ブランチって?
ブランチ(branch)とは直訳すると”枝”という意味になります。ファイルを枝分かれさせて複数バージョンを同時に管理できます。
これもGitの便利な機能の1つですね。
今あるファイルは残したまま別の変更を加えたいときなどに使います。
下記画像のようなイメージ。
ver3 も ver3' もメインの枝の ver2 をベースに変更されています。
メインの枝の最新版は ver3 、サブの枝の最新版は ver3' です。
1つのリポジトリの中に2つの最新版が同時に存在していることになります。
なんのこっちゃですね。分からなくても大丈夫です。
とりあえずやってみましょう。
ブランチを切ってみる
前回の記事の続きでmaster()がチェックアウトされている状態から始めてみます。以下の画像のような状態ですね。チェックマークがついていることを確認してください。
メニューからブランチ->新規ブランチ->ブランチ名を入力->作成
ブランチ名は何でもいいですが、今回は"sub"としました。
ブランチ一覧にsubが追加されましたね。
sub()とmaster()が並んでいますね。
これはsubブランチの最新版とmasterブランチの最新版が同じ状態だということです。
こんなイメージ。
今はsubにチェックマークがついている()ので、subをチェックアウトしています。
この状態で変更をコミットするとsubの枝が伸びていきます。
実際にやってみましょう。
MyTextFile.txtを変更
SourceTreeで追加->コミット
※コミット時にどのブランチにコミットしようとしているか確認できます。
subブランチに対してコミットされることを確認しましょう。
subブランチ()が一歩進みましたね。
こんなイメージ
このままsubに対して変更を加え続けるとmasterは置いてけぼりですね。
安定動作したプログラムをmasterとして残しておいて、
subにどんどん機能を追加していく。といった使い方ができます。
別のブランチの変更を取り込む
さて、前述したsubブランチに加えた変更がいい感じに出来上がったとしましょう。置いてけぼりのmasterブランチにsubで加えた変更を取り込みたいですね。
あるブランチに他のブランチの変更を取り込む。
これをGitではマージ(統合)すると言います。
やってみましょう。
まず、主軸となるブランチをチェックアウトします。
今回はmasterにsubを取り込むのでmasterが軸となります。
をダブルクリック
masterがチェックアウトされたことを確認します。()
メニューからマージ->ログからマージ->subブランチの最新版()を選択->OK
これだけでmasterブランチがsubブランチに追いつきました。
もう一度subブランチをチェックアウトしてそのまま枝を伸ばしてもいいですし、
subブランチが不要になったのであればブランチを削除します。
※マージする際にエラーが起きる場合があります。(マージの競合)
それは次回説明します。
ブランチを削除する
subブランチの変更がmasterに統合されたので、subブランチは不要になったと仮定して削除してみます。
チェックアウトしているブランチは削除できないので
削除前にmasterブランチをチェックアウトしておきましょう。()
ブランチ->ブランチの削除->subブランチの選択->ブランチを削除
もし削除対象のブランチ()の最新コミットが
他のブランチにマージされていない場合は削除時にエラーとなります。
それでも強制的に削除する場合は上記画面のチェックを入れましょう。
こういった感じでブランチの操作(切る/マージする/削除する)が
手軽に行えるのもGitの特徴です。
masterブランチのみで進めてもいいですし、
こまめにブランチを切ってもいいです。
自分にあった使い方を見つけてみてください。
ブランチの切り方に興味のある方は"GitFlow"というものを調べてみるといいかもしれません。
HEADタグって何?
さて、話が少し戻ります。前回の記事で、チェックアウトした際にHEADというタグ()が現れました。
これは何でしょうか?
masterやsubといったブランチ名が入るべき場所にHEADと書かれていますね。
HEADの意味は説明しませんがブランチがないって状態なんです。
実際に作ってみましょう。
この画像の状態だとmasterブランチの先頭は一番上のコミットですね。
下2回のコミットは履歴が残っていますがどのブランチの最新版でもありません。
これらのようにどのブランチの最新でもないコミットをチェックアウトすると
HEADタグ()が現れます。
試しに真ん中のコミットをチェックアウトしてみましょう。
HEADタグ()が現れました。
そしてmasterブランチのチェックアウトマークは消えてしまいました()。
こんなイメージです。
ブランチの最新以外をチェックアウトしたので
仮のブランチを表すタグ()が表示されているんですね。
このまま自由に変更を加えることができますが、
別のコミットをチェックアウトすると変更履歴共々破棄されてしまいます。
(コミットしていても履歴ごと消えてなくなります!)
ちょっと過去に戻してあれこれ試してみるには便利なHEADタグですが
知らずにこのまま変更を加えていくといつのまにか消えていた!
なんて大惨事になりかねません。
コミットはブランチに対して行う!HEADタグに対して行わない!
これは常に意識しておいてください。
HEADタグをブランチに変える
こんなHEADタグ()ですがブランチに変えることもできます。ブランチ->新規ブランチ->ブランチ名入力->ブランチを作成
これでHEADタグが指名したブランチに変わります。
簡単ですね。
間違えてHEADタグに対してコミットしていても慌てずブランチとして繋ぎなおせば大丈夫です。
まとめ
今回は以下の項目を説明しました。
- ブランチとは
- ブランチを切る
- 他のブランチの変更を取り込む(マージ)
- ブランチを削除する
- HEADタグとは
- HEADタグをブランチに変える
ブランチを使いこなせると複数バージョンを自由に行き来できます。
便利に使いこなしましょう!
便利に使いこなしましょう!
次回はマージの競合についてです。