-
1. Gitを始める
- 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 サードパーティのホスト型オプション
- 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 置換
- 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の内部構造
-
A1. 付録A: その他の環境におけるGit
- A1.1 グラフィカルインターフェース
- A1.2 Visual StudioでのGit
- A1.3 Visual Studio CodeでのGit
- A1.4 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMineでのGit
- A1.5 Sublime TextでのGit
- A1.6 BashでのGit
- A1.7 ZshでのGit
- A1.8 PowerShellでのGit
- A1.9 まとめ
-
A2. 付録B: アプリケーションへのGitの組み込み
- A2.1 コマンドラインGit
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
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にはリポジトリの履歴における特定の重要なポイントにタグを付ける機能があります。通常、この機能はリリースポイント(v1.0
、v2.0
など)をマークするために使用されます。このセクションでは、既存のタグをリストする方法、タグを作成および削除する方法、および異なる種類のタグについて学習します。
タグのリスト表示
Gitで既存のタグをリスト表示するのは簡単です。単にgit tag
(オプションで-l
または--list
を付けてもよい)と入力するだけです。
$ git tag
v1.0
v2.0
このコマンドはタグをアルファベット順にリストします。表示される順序には実際には重要性はありません。
特定のパターンに一致するタグを検索することもできます。たとえば、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
注
|
タグのワイルドカードリストには
-l または--list オプションが必要ですタグのリスト全体だけが必要な場合、 ただし、タグ名と一致させるためにワイルドカードパターンを指定する場合は、 |
タグの作成
Gitは2種類のタグをサポートしています: 軽量版と注釈付きです。
軽量版タグは、変更されないブランチに非常によく似ています — 特定のコミットへの単なるポインタです。
一方、注釈付きタグは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はエディタを起動してメッセージを入力できるようにします。
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
Change version number
これによって、コミット情報の前にタグ付け者情報、コミットがタグ付けされた日付、および注釈メッセージが表示されます。
軽量版タグ
コミットにタグを付けるもう1つの方法は、軽量版タグを使用することです。これは基本的に、ファイルに保存されたコミットのチェックサムであり、他の情報は保持されません。軽量版タグを作成するには、-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
Change version number
後からのタグ付け
コミットを過ぎてからタグを付けることもできます。コミット履歴が次のようになっているとします。
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 Create write support
0d52aaab4479697da7686c15f77a3d64d9165190 One more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc Add commit function
4682c3261057305bdd616e23b64b0857d832627b Add todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a Create write support
9fceb02d0ae598e95dc970b74767f19372d61af8 Update rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc Commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a Update readme
今、プロジェクトのv1.2を「Update 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
Update 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 push は両方の種類のタグをプッシュします
|
タグの削除
ローカルリポジトリからタグを削除するには、git tag -d <tagname>
を使用します。たとえば、上記の軽量版タグを次のように削除できます。
$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)
これは、リモートサーバーからタグを削除するものではないことに注意してください。リモートサーバーからタグを削除するには、2つの一般的なバリエーションがあります。
最初のバリエーションはgit push <remote> :refs/tags/<tagname>
です。
$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
- [deleted] v1.4-lw
上記の解釈方法は、コロンの前のNULL値がリモートのタグ名にプッシュされ、実質的に削除されると読み取ることができます。
リモートタグを削除する2番目の(より直感的な)方法は次のとおりです。
$ git push origin --delete <tagname>
タグのチェックアウト
タグが指しているファイルのバージョンを表示したい場合は、そのタグをgit checkout
することができますが、これによりリポジトリは「detached HEAD」状態になり、いくつかの悪影響があります。
$ git checkout v2.0.0
Note: switching to 'v2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout v2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... Add atlas.json and cover image
「detached HEAD」状態では、変更を加えてコミットを作成しても、タグは同じままですが、新しいコミットはどのブランチにも属さず、正確なコミットハッシュ以外では到達不能になります。したがって、変更を加える必要がある場合(たとえば、古いバージョンでバグを修正する場合など)は、通常、ブランチを作成することをお勧めします。
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
これを行ってコミットを作成すると、新しい変更によってversion2
ブランチがv2.0.0
タグとわずかに異なるようになるため、注意してください。