- 
  
1. 使い始める
- 1.1 バージョン管理に関して
 - 1.2 Git略史
 - 1.3 Gitの基本
 - 1.4 コマンドライン
 - 1.5 Gitのインストール
 - 1.6 最初のGitの構成
 - 1.7 ヘルプを見る
 - 1.8 まとめ
 
 - 
  
2. Git の基本
- 2.1 Git リポジトリの取得
 - 2.2 変更内容のリポジトリへの記録
 - 2.3 コミット履歴の閲覧
 - 2.4 作業のやり直し
 - 2.5 リモートでの作業
 - 2.6 タグ
 - 2.7 Git エイリアス
 - 2.8 まとめ
 
 - 
  
3. Git のブランチ機能
- 3.1 ブランチとは
 - 3.2 ブランチとマージの基本
 - 3.3 ブランチの管理
 - 3.4 ブランチでの作業の流れ
 - 3.5 リモートブランチ
 - 3.6 リベース
 - 3.7 まとめ
 
 - 
  
4. Gitサーバー
- 4.1 プロトコル
 - 4.2 サーバー用の Git の取得
 - 4.3 SSH 公開鍵の作成
 - 4.4 サーバーのセットアップ
 - 4.5 Git デーモン
 - 4.6 Smart HTTP
 - 4.7 GitWeb
 - 4.8 GitLab
 - 4.9 サードパーティによる Git ホスティング
 - 4.10 まとめ
 
 - 
  
5. Git での分散作業
- 5.1 分散作業の流れ
 - 5.2 プロジェクトへの貢献
 - 5.3 プロジェクトの運営
 - 5.4 まとめ
 
 
- 
  
6. GitHub
- 6.1 アカウントの準備と設定
 - 6.2 プロジェクトへの貢献
 - 6.3 プロジェクトのメンテナンス
 - 6.4 組織の管理
 - 6.5 スクリプトによる GitHub の操作
 - 6.6 まとめ
 
 - 
  
7. Git のさまざまなツール
- 7.1 リビジョンの選択
 - 7.2 対話的なステージング
 - 7.3 作業の隠しかたと消しかた
 - 7.4 作業内容への署名
 - 7.5 検索
 - 7.6 歴史の書き換え
 - 7.7 リセットコマンド詳説
 - 7.8 高度なマージ手法
 - 7.9 Rerere
 - 7.10 Git によるデバッグ
 - 7.11 サブモジュール
 - 7.12 バンドルファイルの作成
 - 7.13 Git オブジェクトの置き換え
 - 7.14 認証情報の保存
 - 7.15 まとめ
 
 - 
  
8. Git のカスタマイズ
- 8.1 Git の設定
 - 8.2 Git の属性
 - 8.3 Git フック
 - 8.4 Git ポリシーの実施例
 - 8.5 まとめ
 
 - 
  
9. Gitとその他のシステムの連携
- 9.1 Git をクライアントとして使用する
 - 9.2 Git へ移行する
 - 9.3 まとめ
 
 - 
  
10. Gitの内側
- 10.1 配管(Plumbing)と磁器(Porcelain)
 - 10.2 Gitオブジェクト
 - 10.3 Gitの参照
 - 10.4 Packfile
 - 10.5 Refspec
 - 10.6 転送プロトコル
 - 10.7 メンテナンスとデータリカバリ
 - 10.8 環境変数
 - 10.9 まとめ
 
 
- 
  
A1. 付録 A: その他の環境でのGit
- A1.1 グラフィカルインタフェース
 - A1.2 Visual StudioでGitを使う
 - A1.3 EclipseでGitを使う
 - A1.4 BashでGitを使う
 - A1.5 ZshでGitを使う
 - A1.6 PowershellでGitを使う
 - A1.7 まとめ
 
 - 
  
A2. 付録 B: Gitをあなたのアプリケーションに組み込む
- A2.1 Gitのコマンドラインツールを使う方法
 - A2.2 Libgit2を使う方法
 - A2.3 JGit
 
 - 
  
A3. 付録 C: Gitのコマンド
- A3.1 セットアップと設定
 - A3.2 プロジェクトの取得と作成
 - A3.3 基本的なスナップショット
 - A3.4 ブランチとマージ
 - A3.5 プロジェクトの共有とアップデート
 - A3.6 検査と比較
 - A3.7 デバッグ
 - A3.8 パッチの適用
 - A3.9 メール
 - A3.10 外部システム
 - A3.11 システム管理
 - A3.12 配管コマンド
 
 
2.6 Git の基本 - タグ
タグ
多くの VCS と同様に Git にもタグ機能があり、歴史上の重要なポイントに印をつけることができます。よくあるのは、この機能を (v 1.0など) リリースポイントとして使うことです。このセクションでは、既存のタグ一覧の取得や新しいタグの作成、さまざまなタグの形式などについて扱います。
タグの一覧表示
Git で既存のタグの一覧を表示するのは簡単で、
単に git tag と打ち込むだけです。
$ git tag
v0.1
v1.3
このコマンドは、タグをアルファベット順に表示します。この表示順に深い意味はありません。
パターンを指定してタグを検索することもできます。Git のソースリポジトリを例にとると、500以上のタグが登録されています。その中で 1.8.5 系のタグのみを見たい場合は、このようにします。
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5
タグの作成
Git のタグには、軽量 (lightweight) 版と注釈付き (annotated) 版の二通りがあります。
軽量版のタグは、変更のないブランチのようなものです。特定のコミットに対する単なるポインタでしかありません。
しかし注釈付きのタグは、Git データベース内に完全なオブジェクトとして格納されます。 チェックサムが付き、タグを作成した人の名前・メールアドレス・作成日時・タグ付け時のメッセージなども含まれます。 また、署名をつけて GNU Privacy Guard (GPG) で検証することもできます。 一般的には、これらの情報を含められる注釈付きのタグを使うことをおすすめします。 しかし、一時的に使うだけのタグである場合や何らかの理由で情報を含めたくない場合は、 軽量版のタグも使用可能です。
注釈付きのタグ
Git では、注釈付きのタグをシンプルな方法で作成できます。もっとも簡単な方法は、tag コマンドの実行時に -a を指定することです。
$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4
-m で、タグ付け時のメッセージを指定します。これはタグとともに格納されます。注釈付きタグの作成時にメッセージを省略すると、エディタが立ち上がるのでそこでメッセージを記入します。
タグのデータとそれに関連づけられたコミットを見るには git show コマンドを使用します。
$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:19:12 2014 -0700
my version 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700
    changed the version number
タグ付けした人の情報とその日時、そして注釈メッセージを表示したあとにコミットの情報が続きます。
軽量版のタグ
コミットにタグをつけるもうひとつの方法が、軽量版のタグです。
これは基本的に、コミットのチェックサムだけを保持するもので、それ以外の情報は含まれません。
軽量版のタグを作成するには -a、-s あるいは -m といったオプションをつけずにコマンドを実行します。
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
このタグに対して git show を実行しても、先ほどのような追加情報は表示されません。
単に、対応するコミットの情報を表示するだけです。
$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700
    changed the version number
後からのタグ付け
過去にさかのぼってコミットにタグ付けすることもできます。 仮にあなたのコミットの歴史が次のようなものであったとしましょう。
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
今になって、このプロジェクトに v1.2のタグをつけるのを忘れていたことに気づきました。 本来なら “updated rakefile” のコミットにつけておくべきだったものです。 しかし今からでも遅くありません。 特定のコミットにタグをつけるには、そのコミットのチェックサム (あるいはその一部) をコマンドの最後に指定します。
$ git tag -a v1.2 9fceb02
これで、そのコミットにタグがつけられたことが確認できます。
$ git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5
$ git show v1.2
tag v1.2
Tagger: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Feb 9 15:32:16 2009 -0800
version 1.2
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon <mchacon@gee-mail.com>
Date:   Sun Apr 27 20:43:35 2008 -0700
    updated rakefile
...
タグの共有
デフォルトでは、git push コマンドはタグ情報をリモートに送りません。
タグを作ったら、タグをリモートサーバーにプッシュするよう明示する必要があります。
その方法は、リモートブランチを共有するときと似ています。
git push origin [tagname] を実行するのです。
$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.5 -> v1.5
多くのタグを一度にプッシュしたい場合は、
git push コマンドのオプション --tags を使用します。
これは、手元にあるタグのうちまだリモートサーバーに存在しないものをすべて転送します。
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw
これで、誰か他の人がリポジトリのクローンやプルを行ったときにすべてのタグを取得できるようになりました。
タグのチェックアウト
実際のところ、タグのチェックアウトはGitではできないも同然です。
というのも、タグ付けされた内容に変更を加えられないからです。
仮に、とある時点でのリポジトリの内容を、
タグ付けされたような形で作業ディレクトリに保持したいとしましょう。
その場合、git checkout -b [branchname] [tagname] を実行すると特定のタグと紐付けたブランチを作成することはできます。
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
とはいえ、この状態でコミットを追加すると、 version2 ブランチは v2.0.0 タグの内容とは異なってしまいます。
ブランチの状態が先へ進んでしまうからです。十分に気をつけて作業しましょう。