-
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ツール
-
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 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 Plumbingコマンド
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
コマンドは、組み込みのgit diff
コマンド以外のツールを使用したい場合に、2つのツリー間の差分を表示するために外部ツールを起動するだけです。
ステージングされた変更と未ステージングの変更を表示するでは、これについて簡単に言及するだけです。
git commit
git commit
コマンドは、git add
でステージングされたすべてのファイルコンテンツを受け取り、データベースに新しい永続的なスナップショットを記録し、現在のブランチのブランチポインタをそれに移動させます。
最初に、変更をコミットするでコミットの基本を説明しています。そこでは、日常のワークフローでgit add
ステップをスキップするために-a
フラグを使用する方法や、エディタを起動する代わりにコマンドラインでコミットメッセージを渡すために-m
フラグを使用する方法も示しています。
やり直しでは、最新のコミットをやり直すために--amend
オプションを使用する方法を説明しています。
ブランチの概要では、git commit
が何をするのか、そしてなぜそのようにするのかについて、さらに詳しく説明しています。
コミットの署名では、-S
フラグを使用してコミットを暗号学的に署名する方法を見ています。
最後に、コミットオブジェクトで、git commit
コマンドがバックグラウンドで何をしているのか、そしてそれが実際にどのように実装されているのかを見ていきます。
git reset
git reset
コマンドは、動詞から推測できるように、主に「やり直し」のために使用されます。これはHEAD
ポインタを移動させ、オプションでindex
またはステージングエリアを変更し、さらに--hard
を使用するとワーキングディレクトリも変更できます。この最後のオプションは、誤って使用すると作業を失う可能性があるため、使用する前に理解しておくことが重要です。
最初に、ステージングされたファイルのステージング解除でgit reset
の最も簡単な使用法を効果的に説明しています。そこでは、git add
を実行したファイルをステージング解除するためにこれを使用します。
次に、このコマンドの説明に完全に特化したResetの解明で、かなり詳細に説明しています。
マージを中止するでは、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コマンドを使用する可能性のある多くのオプションとシナリオを説明しています。