-
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 配管コマンド
A3.3 付録 C: Gitのコマンド - 基本的なスナップショット
基本的なスナップショット
コンテンツをステージングしたり、それを歴史に対してコミットしたりする基本的なワークフローについては、基本的なコマンドが少しあるだけです。
git add
git add
コマンドは、次のコミット用に、ワーキングディレクトリからステージングエリア(または “インデックス”)へコンテンツを追加します。git commit
コマンドの実行時、デフォルトではこのステージングエリアしか参照しません。そのため、 git add
は、次のコミットのスナップショットが正確にはどのようになっていて欲しいのかを組み立てるのに使用されます。
このコマンドは、Gitの中でも非常に重要なコマンドです。本書の中でも、何十回も言及したり使用したりしています。ここでは、その中で見られるユニークな使用法をいくつか取り上げます。
git add
の紹介と詳細な説明を最初に行ったのは 新しいファイルの追跡 でした。
マージ時のコンフリクト では、マージの衝突を解決するためにこのコマンドを使用する方法について言及しました。
対話的なステージング では、このコマンドを使って、変更されたファイルのうち、特定の部分だけを対話的にステージングする方法について細かく見てきました。
最後に、 ツリーオブジェクト では、舞台裏で何を行っているかを理解するため、このコマンドを低レベルで模倣しました。
git status
git status
コマンドは、作業ディレクトリとステージングエリアとに対して、ファイルの状態について別々の内容を表示します。それぞれ、変更されているがステージングされていないファイルはどれか、ステージングされているがまだコミットされていないファイルはどれかを表示します。通常の使用法では、これらのステージの間でファイルを移動する方法について、基本的なヒントも表示します。
最初に status
を取り上げたのは ファイルの状態の確認 で、基本的な使用法と単純化された使用法の両方を取り上げました。本書の全体を通してこのコマンドを使ってきましたが、git status
コマンドで行えることのほぼすべてをここで取り上げています。
git diff
git diff
は、2つの任意のツリーで確認したい場合に使用します。これは、作業中の環境とステージングエリアの差異(git diff
だけで表示される)でもよいですし、ステージングエリアと最後のコミットの差異(git diff --staged
)でもよいですし、2つのコミットの差異(git diff master branchB
)でもよいです。
git diff
の基本的な使用法を最初に見たのは ステージされている変更 / されていない変更の閲覧 でした。ここでは、どの変更がステージングされていて、どの変更がまだステージングされていないのか見る方法を示しました。
コミットの指針 では、--check
オプションを使って、問題となる空白文字がないかをコミット前に探すのに使いました。
何が変わるのかの把握 では、git diff A...B
という文法を使って、ブランチ間の差異をより効率的にチェックする方法を見てきました。
高度なマージ手法 では、-b
を使って空白文字の差異をフィルタしました。また、 --theirs
、 --ours
、 --base
を使って、衝突しているファイルのいろいろな段階を比較しました。
最後に、 サブモジュールの作り方 では、サブモジュールの変更を効率的に比較するために --submodule
を使いました。
git difftool
git difftool
コマンドは、単に外部ツールを起動して、2つのツリーの差異を表示します。これは、ビルトインの git diff
以外のコマンドを使いたい場合に使用します。
このコマンドについては、 ステージされている変更 / されていない変更の閲覧 で簡単に言及しただけです。
git commit
git commit
コマンドは、git add
でステージングされたすべてのファイルの内容を取得し、データベースに新しく永続的なスナップショットを記録し、最後に現在のブランチのブランチポインタをそこまで進めます。
コミットの基本を最初に取り上げたのは 変更のコミット でした。そこではまた、 -a
フラグを使って、日々のワークフローで git add
を行うステップを省略する方法の実例を示しました。また、-m
フラグを使って、コミットメッセージを、エディタを起動するのではなくコマンドラインから渡す方法についても説明しました。
作業のやり直し では、--amend
オプションを使って最新のコミットを取り消す方法を取り上げました。
ブランチとは では、git commit
が何を行っているか、なぜそのようなことをするのかについて非常に細かいところまで説明しました。
コミットへの署名 では、-S
フラグを使って、コミットに暗号を使って署名を行う方法を見てきました。
最後に、 コミットオブジェクト では、 git commit
コマンドがバックグラウンドで何を行っているのか、またそれが実際どのように実装されているのかを簡単に見てきました。
git reset
git reset
コマンドは、その動詞から分かるかも知れませんが、主に物事を元に戻すのに使われます。このコマンドは、 HEAD
ポインタをあちこち動かし、必要に応じて インデックス
またはステージングエリアに変更を加えます。 --hard
を使えば作業ディレクトリを変更することもできます。この最後のオプションは、誤って使用すると作業結果を失う可能性があるので、必ずその点を理解した上で使用してください。
git reset
の最も単純な使用法を実質的に初めて取り上げたのは ステージしたファイルの取り消し でした。ここでは、 git add
したファイルのステージを解除するのに使いました。
リセットコマンド詳説 は、全体がこのコマンドの説明に費やされており、このコマンドについてかなり詳細に取り上げています。
マージの中止 では、 git reset --hard
を使用してマージを中断しました。また、git reset
コマンドのちょっとしたラッパーである git merge --abort
も使用しました。
git rm
git rm
コマンドは、ステージングエリアおよびGitの作業ディレクトリからファイルを削除するのに使用されます。これは、次のコミット用に git add
でファイルの削除をステージングするのに似ています。
ファイルの削除 では、 git rm
コマンドの詳細を取り上げました。ファイルを再帰的に削除する方法、 --cached
を使って作業ディレクトリにファイルを残しつつステージングエリアからファイルを削除する方法などについて取り上げました。
これ以外の方法で git rm
を使用したのは オブジェクトの削除 だけです。ここでは、 git filter-branch
を実行した際に、 --ignore-unmatch
について簡単に説明しました。これは、削除しようとしているファイルが存在しなかった場合でもエラーとしないオプションで、スクリプトを作成する際に役立ちます。
git mv
git mv
は簡単な便利コマンドで、ファイルを移動した上で、新しいファイルを git add
し、古いファイルを git rm
します。
このコマンドについては、 ファイルの移動 で簡単に言及しただけです。
git clean
git clean
コマンドは、作業ディレクトリから不要なファイルを削除するのに使用されます。これには、ビルド時の一時ファイルやマージ衝突ファイルの削除が含まれます。
作業ディレクトリの掃除 では、cleanコマンドのオプションの多くや、cleanコマンドを使用する シナリオについて取り上げました。