Skip to content

Latest commit

 

History

History
1115 lines (871 loc) · 83.5 KB

C-git-commands.asc

File metadata and controls

1115 lines (871 loc) · 83.5 KB

Appendix A: Gitのコマンド

本書を通して、数多くのGitコマンドを紹介してきました。コマンドの説明にあたっては、物語風に、使うコマンドを少しずつ増やしていくように心掛けてきました。しかしその結果、コマンドの使用例が本書の全体に散在する形になってしまいました。

この付録では、本書で扱ったすべてのGitコマンドを見ていきます。コマンドはその用途ごとに大まかにまとめてあります。ここでは、それぞれのコマンドが一般的に何を行うのか、そして本書のどこでそのコマンドが使われていたかについて述べていきます。

セットアップと設定

最初のGitの呼び出しから、日々行われる微調整や参照に至るまで、非常によく使われるコマンドが2つあります。 config コマンドと help コマンドです。

git config

Gitでは、様々な処理についてデフォルトの処理方法があります。その多くでは、デフォルトの処理方法を変えたり、あなた好みの設定をしたりできます。これには、Gitにあなたの名前を教えることから、端末の色の変更や使用するエディタの設定まですべてが含まれます。 このコマンドが読み書きするファイルはいくつかあり、それによってグローバルな設定をしたり特定のリポジトリだけの設定をしたりできるようになっています。

git config コマンドは、本書のほぼすべての章で使用されています。

ch01-introduction.asc では、Gitを使い始める前に、名前、メールアドレス、エディタの設定を行う際に使用しました。

ch02-git-basics.asc では、大量のオプションを毎回打ち込まなくてもいいように、git config を使って省略形のコマンドを作成する方法を示しました。

ch03-git-branching.asc では、git pull の実行時に --rebase をデフォルトにするのに使用しました。

ch07-git-tools.asc では、HTTPパスワードのデフォルトの保存先を設定するのに使用しました。

ch08-customizing-git.asc では、Gitへ入ってくるコンテンツ、Gitから出ていくコンテンツに対して、smudgeとcleanフィルタを設定する方法を示しました。

最後に、ch08-customizing-git.asc の内容は基本的にすべてこのコマンドに関するものです。

git help

git help コマンドは、任意のコマンドについて、Gitに同梱されているあらゆるドキュメントを表示します。一般的なものの多くはこの付録でも概要を示していきますが、各コマンドで指定可能なオプションとフラグすべての一覧は、いつでも git help <command> で表示できます。

ch01-introduction.asc では、 git help コマンドの紹介を行いました。 ch04-git-server.asc では、 git shell に関する詳細情報を見る方法を示しました。

プロジェクトの取得と作成

Gitリポジトリを取得するには、2つの方法があります。一つはネットワーク上かどこかにある既存のリポジトリをコピーしてくる方法、もう一つは既存のディレクトリに新しくリポジトリを作成する方法です。

git init

ディレクトリを選んで、そこをGitのリポジトリにしてバージョン管理を始められるようにするには、単に git init を実行します。

これを最初に紹介したのは ch02-git-basics.asc で、作業の開始にあたり新規にリポジトリを作成しました。

ch03-git-branching.asc では、デフォルトのブランチを ``master'' から変更する方法を簡単に述べました。

ch04-git-server.asc では、サーバ用に空のベアリポジトリを作成するのにこのコマンドを使用しました。

最後に、 ch10-git-internals.asc では、舞台裏で実際に行われていることの詳細について、その一部を見てきました。

git clone

git clone は、実際にはいくつかの他のコマンドのラッパーのようなものです。新しいディレクトリを作成し、そこに入って git init を実行して空のGitリポジトリを作成し、渡したURLをリモートに追加(git remote add)し(デフォルトでは origin という名前が付けられる)、そのリモートリポジトリから git fetch し、最後に git checkout でワーキングディレクトリに最新のコミットをチェックアウトします。

git clone コマンドは本書全体を通して何十回も使用されてきましたが、ここでは興味深い数カ所を列挙します。

基本的には ch02-git-basics.asc でコマンドの紹介と説明を行いました。ここではいくつかの例を示しました。

ch04-git-server.asc では、 --bare オプションを使用してワーキングディレクトリのないGitリポジトリのコピーを作成する方法を見てきました。

ch07-git-tools.asc では、Gitリポジトリのバンドルファイルを展開するのに使用しました。

最後に、 ch07-git-tools.asc では、 --recursive オプションを使って、サブモジュールつきのリポジトリのクローンを簡単に行う方法を学びました。

このコマンドは本書の他の多くの箇所でも使われていますが、ここではちょっとユニークだったり、他とは違う使われ方をしている箇所を挙げました。

基本的なスナップショット

コンテンツをステージングしたり、それを歴史に対してコミットしたりする基本的なワークフローについては、基本的なコマンドが少しあるだけです。

git add

git add コマンドは、次のコミット用に、ワーキングディレクトリからステージングエリア(または `インデックス'')へコンテンツを追加します。`git commit コマンドの実行時、デフォルトではこのステージングエリアしか参照しません。そのため、 git add は、次のコミットのスナップショットが正確にはどのようになっていて欲しいのかを組み立てるのに使用されます。

このコマンドは、Gitの中でも非常に重要なコマンドです。本書の中でも、何十回も言及したり使用したりしています。ここでは、その中で見られるユニークな使用法をいくつか取り上げます。

git add の紹介と詳細な説明を最初に行ったのは ch02-git-basics.asc でした。

ch03-git-branching.asc では、マージの衝突を解決するためにこのコマンドを使用する方法について言及しました。

ch07-git-tools.asc では、このコマンドを使って、変更されたファイルのうち、特定の部分だけを対話的にステージングする方法について細かく見てきました。

最後に、 ch10-git-internals.asc では、舞台裏で何を行っているかを理解するため、このコマンドを低レベルで模倣しました。

git status

git status コマンドは、作業ディレクトリとステージングエリアとに対して、ファイルの状態について別々の内容を表示します。それぞれ、変更されているがステージングされていないファイルはどれか、ステージングされているがまだコミットされていないファイルはどれかを表示します。通常の使用法では、これらのステージの間でファイルを移動する方法について、基本的なヒントも表示します。

最初に status を取り上げたのは ch02-git-basics.asc で、基本的な使用法と単純化された使用法の両方を取り上げました。本書の全体を通してこのコマンドを使ってきましたが、git status コマンドで行えることのほぼすべてをここで取り上げています。

git diff

git diff は、2つの任意のツリーで確認したい場合に使用します。これは、作業中の環境とステージングエリアの差異(git diff だけで表示される)でもよいですし、ステージングエリアと最後のコミットの差異(git diff --staged)でもよいですし、2つのコミットの差異(git diff master branchB)でもよいです。

git diff の基本的な使用法を最初に見たのは ch02-git-basics.asc でした。ここでは、どの変更がステージングされていて、どの変更がまだステージングされていないのか見る方法を示しました。

ch05-distributed-git.asc では、--check オプションを使って、問題となる空白文字がないかをコミット前に探すのに使いました。

ch05-distributed-git.asc では、git diff A…​B という文法を使って、ブランチ間の差異をより効率的にチェックする方法を見てきました。

ch07-git-tools.asc では、-b を使って空白文字の差異をフィルタしました。また、 --theirs--ours--base を使って、衝突しているファイルのいろいろな段階を比較しました。

最後に、 ch07-git-tools.asc では、サブモジュールの変更を効率的に比較するために --submodule を使いました。

git difftool

git difftool コマンドは、単に外部ツールを起動して、2つのツリーの差異を表示します。これは、ビルトインの git diff 以外のコマンドを使いたい場合に使用します。

このコマンドについては、 ch02-git-basics.asc で簡単に言及しただけです。

git commit

git commit コマンドは、git add でステージングされたすべてのファイルの内容を取得し、データベースに新しく永続的なスナップショットを記録し、最後に現在のブランチのブランチポインタをそこまで進めます。

コミットの基本を最初に取り上げたのは ch02-git-basics.asc でした。そこではまた、 -a フラグを使って、日々のワークフローで git add を行うステップを省略する方法の実例を示しました。また、-m フラグを使って、コミットメッセージを、エディタを起動するのではなくコマンドラインから渡す方法についても説明しました。

ch02-git-basics.asc では、--amend オプションを使って最新のコミットを取り消す方法を取り上げました。

ch03-git-branching.asc では、git commit が何を行っているか、なぜそのようなことをするのかについて非常に細かいところまで説明しました。

ch07-git-tools.asc では、-S フラグを使って、コミットに暗号を使って署名を行う方法を見てきました。

最後に、 ch10-git-internals.asc では、 git commit コマンドがバックグラウンドで何を行っているのか、またそれが実際どのように実装されているのかを簡単に見てきました。

git reset

git reset コマンドは、その動詞から分かるかも知れませんが、主に物事を元に戻すのに使われます。このコマンドは、 HEAD ポインタをあちこち動かし、必要に応じて インデックス またはステージングエリアに変更を加えます。 --hard を使えば作業ディレクトリを変更することもできます。この最後のオプションは、誤って使用すると作業結果を失う可能性があるので、必ずその点を理解した上で使用してください。

git reset の最も単純な使用法を実質的に初めて取り上げたのは ch02-git-basics.asc でした。ここでは、 git add したファイルのステージを解除するのに使いました。

ch07-git-tools.asc は、全体がこのコマンドの説明に費やされており、このコマンドについてかなり詳細に取り上げています。

ch07-git-tools.asc では、 git reset --hard を使用してマージを中断しました。また、git reset コマンドのちょっとしたラッパーである git merge --abort も使用しました。

git rm

git rm コマンドは、ステージングエリアおよびGitの作業ディレクトリからファイルを削除するのに使用されます。これは、次のコミット用に git add でファイルの削除をステージングするのに似ています。

ch02-git-basics.asc では、 git rm コマンドの詳細を取り上げました。ファイルを再帰的に削除する方法、 --cached を使って作業ディレクトリにファイルを残しつつステージングエリアからファイルを削除する方法などについて取り上げました。

これ以外の方法で git rm を使用したのは ch10-git-internals.asc だけです。ここでは、 git filter-branch を実行した際に、 --ignore-unmatch について簡単に説明しました。これは、削除しようとしているファイルが存在しなかった場合でもエラーとしないオプションで、スクリプトを作成する際に役立ちます。

git mv

git mv は簡単な便利コマンドで、ファイルを移動した上で、新しいファイルを git add し、古いファイルを git rm します。

このコマンドについては、 ch02-git-basics.asc で簡単に言及しただけです。

git clean

git clean コマンドは、作業ディレクトリから不要なファイルを削除するのに使用されます。これには、ビルド時の一時ファイルやマージ衝突ファイルの削除が含まれます。

ch07-git-tools.asc では、cleanコマンドのオプションの多くや、cleanコマンドを使用する シナリオについて取り上げました。

ブランチとマージ

Gitのブランチとマージの機能は、その大半がほんの一握りのコマンドで実装されています。

git branch

git branch コマンドは、実際にはブランチ管理ツールのようなものです。あなたの持っているブランチを一覧表示したり、新しいブランチを作成したり、ブランチを削除したり、ブランチの名前を変更したりできます。

ch03-git-branching.asc のほとんどは branch コマンドに費やされており、この章の全体に渡って`branch` コマンドが使用されています。最初にこのコマンドを紹介したのは ch03-git-branching.asc で、そこで扱った以外の機能(一覧表示と削除)のほとんどは ch03-git-branching.asc で見てきました。

ch03-git-branching.asc では、 git branch -u を使用して追跡ブランチを設定しました。

最後に、ch10-git-internals.asc では、このコマンドがバックグラウンドで行っていることについて見てきました。

git checkout

git checkout コマンドは、ブランチを切り替える際と、コンテンツを作業ディレクトリへチェックアウトするのに使用されます。

このコマンドは、 ch03-git-branching.asc で、 git branch コマンドとともに初めて登場しました。

ch03-git-branching.asc では、--track フラグを使用して、ブランチの追跡を開始する方法を見てきました。

ch07-git-tools.asc では、 --conflict=diff3 を使用して、ファイルの衝突部分を再表示しました。

ch07-git-tools.asc では、git checkoutgit reset の関係の詳細を見てきました。

最後に、ch10-git-internals.asc では、実装の詳細の一部を見てきました。

git merge

git merge は、チェックアウト中のブランチに、1つまたは複数のブランチをマージする際に使用されるツールです。 このコマンドは、現在のブランチをマージの結果まで進めます。

git merge コマンドを最初に紹介したのは ch03-git-branching.asc でした。このコマンドは本書の様々な場所で使用されていますが、 merge コマンドにはごく少数のバリエーションしかありません — その多くは、単に git merge <branch> でマージする単一のブランチの名前を指定しているだけです。

ch05-distributed-git.asc の最後では、マージの際にコミットをひとつにまとめる(Gitがマージを行う際に、マージするブランチの歴史を記録せず、あたかも新しくコミットされたかのようにする)方法について取り上げました。

ch07-git-tools.asc では、マージのプロセスとコマンドについて多くを見てきました。これには、-Xignore-space-change` コマンドや、 --abort フラグを使って問題のあるマージを中断する方法が含まれます。

ch07-git-tools.asc では、あなたのプロジェクトでGPG署名を使っている場合に、マージする前に署名を確認する方法を学びました。

最後に、ch07-git-tools.asc では、サブツリーマージについて学びました。

git mergetool

git mergetool コマンドは、Gitのマージに問題があった場合に、単に外部のマージ補助ツールを起動するコマンドです。

ch03-git-branching.asc では、このコマンドについて簡単に言及しました。また、ch08-customizing-git.asc では、独自の外部マージツールを実装する方法について詳細に見てきました。

git log

git log コマンドは、プロジェクトに記録されている歴史を、最新のコミットのスナップショットから後ろ向きに走査して到達可能な歴史を表示するのに使用されます。デフォルトでは現在のブランチの歴史だけを表示しますが、別のブランチ、または複数のブランチのHEADを与えて走査させることもできます。また、コミットレベルで複数のブランチ間の差異を表示するために使用されることもあります。

このコマンドは、本書のほぼすべての章で、プロジェクトの歴史の実例を表示するのに使用されています。

ch02-git-basics.asc では、このコマンドを紹介し、ある程度深く説明を行いました。ここでは、各コミットで何が取り込まれたかを -p および --stat オプションを使って知る方法、 --pretty および --oneline オプションで歴史をより簡潔な形で見る方法、および日付や作者で簡単なフィルタリングを行うオプションを見てきました。

ch03-git-branching.asc では、 --decorate オプションを使用して、ブランチポインタがどこを指しているかを簡単に可視化しました。また、 --graph オプションを使用して、分岐した歴史がどのようになっているかを見てきました。

ch05-distributed-git.asc および ch07-git-tools.asc では、 git log コマンドで branchA..branchB 形式の構文を使用して、 他のブランチと比較して、あるブランチに固有のコミットはどれかを見る方法を取り上げました。ch07-git-tools.asc では、かなり広範囲に渡ってこのコマンドを見てきました。

ch07-git-tools.asc および ch07-git-tools.asc では、どちらか一方のブランチにだけ入っているものは何かを見るための branchA…​branchB 形式および --left-right 構文の使い方を扱いました。ch07-git-tools.asc では、マージ衝突のデバッグを支援するための --merge オプションの使い方と、歴史の中のマージコミットの衝突を見るための --cc オプションの使い方を見てきました。

ch07-git-tools.asc では、ブランチを走査する代わりにこのツールを使用してGit reflogを見るために -g オプションを使いました。

ch07-git-tools.asc では、ある機能の歴史など、コードの歴史上で起こった出来事を検索するために、 -S および -L オプションを使用して非常に洗練された検索を行う方法を見てきました。

ch07-git-tools.asc では、 --show-signature を使って、各コミットが正当に署名されているかどうかに基づいて、 git log の出力に対してバリデーション文字列を付け加える方法を見てきました。

git stash

git stash コマンドは、未コミットの作業を一時的に保存する際に使用されます。これは、ワーキングディレクトリをきれいにしたいが、作業中の内容をブランチにコミットしたくないという場合に使用されます。

このコマンドの機能は基本的にすべて ch07-git-tools.asc で取り上げました。

git tag

`git tag`コマンドは、コードの歴史の中で、特定のポイントに永続的なブックマークを付与するのに使用されます。一般的には、このコマンドはリリース作業などで使用されます。

ch02-git-basics.asc では、このコマンドの紹介と詳細な説明を行いました。また、ch05-distributed-git.asc では、実際にこのコマンドを使用しました。

ch07-git-tools.asc では、 -s フラグを使ってGPGで署名されたタグを作成する方法、および -v フラグを使ってタグの署名を検証する方法を取り上げました。

プロジェクトの共有とアップデート

Gitにおいて、ネットワークにアクセスするコマンドはそれほど多くありません。ほぼ全てのコマンドはローカル・データベース上で動作します。成果物を共有したり、他の場所から変更点をプルする準備ができたら、リモートリポジトリを扱うほんの一握りのコマンドを使います。

git fetch

git fetch コマンドは、リモートリポジトリと通信し、そのリポジトリにあって現在のリポジトリにない情報を全て取得します。またその上で、取得した情報をローカル・データベースへ保存します。

このコマンドを最初に見たのは ch02-git-basics.asc でした。続いて、その使用例を ch03-git-branching.asc で見てきました。

ch05-distributed-git.asc では、例のいくつかでこのコマンドを使用しました。

ch06-github.asc では、デフォルトの範囲の外側から、特定の単一の参照を取得するのにこのコマンドを使用しました。また、 ch07-git-tools.asc では、バンドルからフェッチする方法を見てきました。

ch10-git-internals.asc では、 git fetch にデフォルトとは少し違った動きをさせるために、高度にカスタマイズされたrefspecをセットアップしました。

git pull

git pull コマンドは、基本的には git fetch コマンドと git merge コマンドの組み合わせです。Gitは指定したリモートからフェッチを行い、続けて現在のブランチへそれをマージするよう試みます。

ch02-git-basics.asc では、このコマンドについて簡単に紹介しました。 ch02-git-basics.asc では、このコマンドを実行した場合に何がマージされるのかを見る方法を示しました。

ch03-git-branching.asc では、リベースの際の問題に対する支援としてこのコマンドを使用する方法を見てきました。

ch05-distributed-git.asc では、このコマンドにURLを指定して、一回限りのやり方で変更点をプルする方法を示しました。

最後に、ch07-git-tools.asc では、このコマンドに --verify-signatures オプションを使用して、pullの対象のコミットがGPGで署名されていることを検証できることに、ごく簡単に言及しました。

git push

git push コマンドは、他のリポジトリと通信し、自分のローカル・データベースにあって通信先のリポジトリにないものは何かを計算した上で、差分を通信先のリポジトリへプッシュします。このコマンドは、通信先のリポジトリへの書き込みアクセスを必要とするので、通常は何らかの形で認証が行われます。

最初に git push コマンドについて見たのは ch02-git-basics.asc でした。ここでは、ブランチをリモートリポジトリへプッシュする基本に触れました。ch03-git-branching.asc では、特定のブランチをプッシュする方法について少し詳細に見てきました。 ch03-git-branching.asc では、自動的にプッシュをするために、追跡ブランチを設定する方法を見てきました。ch03-git-branching.asc では、git push でサーバ上のブランチを削除するために、`--delete`フラグを使用しました。

ch05-distributed-git.asc では、全体を通して、複数のリモートとブランチ上の成果物を共有する際の git push を使用した例をいくつか見てきました。

ch02-git-basics.asc では、 --tags オプションで作成したタグを共有するためにこのコマンドを使用する方法を見てきました。

ch07-git-tools.asc では、サブモジュールのサブプロジェクトをプッシュする前に、--recurse-submodules オプションを使用して、サブモジュールの成果物が全て公開されているかをチェックしました。これは、サブモジュールを使用している場合に非常に役立ちます。

ch08-customizing-git.asc では、 pre-push フックについて簡単に述べました。これは、プッシュが完了する前に実行するよう設定できるスクリプトで、プッシュしてよいかを検査します。

最後に、 ch10-git-internals.asc では、普段使用されるショートカットの代わりに、完全なrefspecを使用したプッシュを見てきました。これは、共有したい成果物を厳密に指定する際の助けになります。

git remote

git remote コマンドは、リモートリポジトリの記録を管理するツールです。このコマンドでは、長いURLを毎回タイプしなくて済むように、URLの短縮形(例えば `origin'' )を保存できます。短縮形は複数持つことができます。 `git remote コマンドは、短縮形の追加、変更、削除に使用されます。

このコマンドは、短縮形の一覧表示、追加、削除、リネームなどを含め、 ch02-git-basics.asc で詳しく取り上げられています。

また、それ以降のほぼすべての章でもこのコマンドは使用されていますが、そこでは常に標準的な git remote add <name> <url> の形式で使用されています。

git archive

git archive コマンドは、プロジェクトの特定のスナップショットのアーカイブファイルを作成するのに使用されます。

ch05-distributed-git.asc では、git archive を使用して、プロジェクトの共有用のtarballを作成しました。

git submodule

git submodule コマンドは、通常のリポジトリ内で、外部のリポジトリを管理するのに使用されます。外部リポジトリの内容は、ライブラリだったり、その他の共有リソースだったりします。 submodule コマンドには、これらのリソースを管理するために、いくつかのサブコマンド(addupdatesync など)があります。

このコマンドについて言及しているのは ch07-git-tools.asc だけです。この節だけで、このコマンドのすべてを取り上げています。

検査と比較

git show

git show コマンドは、Gitオブジェクトを、人間が読める単純な形で表示します。このコマンドは通常、タグまたはコミットに関する情報を表示するのに使用されます。

最初に ch02-git-basics.asc では、このコマンドを使用して、注釈つきのタグの情報を表示しました。

その後 ch07-git-tools.asc では、各種のリビジョン選択が解決するコミットを示すために、このコマンドを何度も使用しました。

ch07-git-tools.asc では、git show でできることの中でもう一つ興味深いこととして、マージが衝突した際に、様々な状態の中から特定のファイルの内容を抽出しました。

git shortlog

git shortlog コマンドは、 git log の出力を要約するのに使用されます。このコマンドは、 git log と同じオプションの多くを受け取りますが、すべてのコミットを一覧表示する代わりに、コミットの作者の単位でまとめた概要を表示します。

ch05-distributed-git.asc では、このコマンドを使用して、すてきな変更履歴を作成する方法を示しました。

git describe

git describe コマンドは、あるコミットを指し示す何らかの文字列を受け取って、人間が読めてかつ不変であるような文字列を生成します。この文字列は、コミットのSHA-1と同様にひとつのコミットを特定できますが、より理解しやすい形式になっています。

ch05-distributed-git.asc および ch05-distributed-git.asc では、後でリリースファイルに名前をつけるために、 git describe を使用して文字列を取得しました。

デバッグ

Gitには、コードのデバッグを支援するためのコマンドが2つあります。このコマンドは、どこに問題が入り込んだのかを明らかにするところから、誰がそれを入れ込んだのかを明らかにするところまでを支援してくれます。

git bisect

git bisect は非常に便利なデバッグツールです。バグや問題が最初に入り込んだのがどのコミットか、二分探索を自動的に行って調査します。

このコマンドは ch07-git-tools.asc でくまなく取り上げました。このコマンドに言及しているのはこの節だけです。

git blame

git blame コマンドは、任意のファイルの各行に対して、注釈を付与して表示します。注釈には、ファイルの各行を最後に変更したのはどのコミットか、そのコミットの作者は誰かが含まれます。これは、コードの特定の行について質問したいときに、誰に聞いたらいいか調べるのに役立ちます。

このコマンドは ch07-git-tools.asc で取り上げました。このコマンドについて言及しているのはこの節だけです。

git grep

git grep コマンドは、任意の文字列や正規表現でソースコード内を検索することができます。検索は、古いバージョンのプロジェクトに対して行うこともできます。

このコマンドは ch07-git-tools.asc で取り上げました。このコマンドについて言及しているのはこの節だけです。

パッチの適用

Gitのコマンドのうちいくつかは、コミットとはそれによっておこる修正のことであるという観点で捉え、また一連のコミットを一続きのパッチの集まりであるとみなす考え方を中心としています。これらのコマンドは、この考え方に従ってブランチを管理するのに役立ちます。

git cherry-pick

git cherry-pick コマンドは、あるコミットで行われた変更を取得して、それを現在のブランチへ新しいコミットとして取り込む場合に使用されます。これは、あるブランチをマージしてすべての変更を取り込むのではなく、そのブランチから一つか二つのコミットだけを個別に取り込みたい場合に役立ちます。

ch05-distributed-git.asc では、チェリーピックの説明を行い、実例を示しました。

git rebase

git rebase コマンドは、基本的には cherry-pick を自動化したものです。対象となる一連のコミットを決めた上で、それらを一つずつ、元と同じ順序となるように、どこか別の場所へチェリーピックします。

ch03-git-branching.asc では、リベースについて詳しく取り上げました。ここでは、公開済みのブランチのリベースに関連した、共同作業の際の課題についても取り上げました。

ch07-git-tools.asc では、歴史を分割して、二つの別々のリポジトリへ格納する例を通して、このコマンドの実用的な使い方を示しました。またその際に --onto フラグを使用しました。

ch07-git-tools.asc では、リベース中に発生するマージコンフリクトについて見てきました。

ch07-git-tools.asc では、 -i オプションを指定して、対話的スクリプティングモードを使用しました。

git revert

git revert コマンドは、本質的には git cherry-pick コマンドの逆です。このコマンドは、コマンドの対象となるコミットで取り込まれた変更に対して、本質的にはそれを元に戻したり取り消したりすることで、そのコミットとは逆の変更を行うコミットを新規に作成します。

ch07-git-tools.asc では、マージコミットを元に戻すのにこのコマンドを使用しました。

メール

Git自体を含め、多くのGitプロジェクトは、もっぱらメーリングリスト上で管理されています。Gitには、メールで簡単に送れるパッチを生成したり、メールボックスからパッチ当てをしたりといった、このプロセスを補助するツールがいくつか組み込まれています。

git apply

git apply コマンドは、git diff コマンドまたはGNU diffコマンドで作成したパッチを適用します。ほんの少しの違いを除けば、これは`patch` コマンドが行うであろう処理と同様のものです。

ch05-distributed-git.asc では、このコマンドの使い方と、それを行うであろう状況を例示しました。

git am

git am コマンドは、メールの受信トレイ(特にmboxフォーマットのもの)からパッチを適用するのに使用されます。これは、パッチをメールで受け取った上で、それを簡単にプロジェクトへ適用するのに役立ちます。

ch05-distributed-git.asc では、--resolved、, `-i および -3 オプションの使い方を含め、 git am コマンドの使い方とワークフローを取り上げました。

git am に関連したワークフローを便利にするのに使用できるフックは数多くあります。それらのフックはすべて ch08-customizing-git.asc で取り上げました。

ch06-github.asc では、GitHubのプルリクエストの変更点をpatch形式にフォーマットしたものを、このコマンドを使用して適用しました。

git format-patch

git format-patch コマンドは、一連のパッチをmbox形式にフォーマットし、適切にフォーマットされた形式でメーリングリストへ送信できるようにします。

ch05-distributed-git.asc では、 git format-patch ツールを使用してプロジェクトへ貢献する例を見てきました。

git imap-send

git imap-send コマンドを使うと、git format-patch コマンドによって生成された mailbox ファイルをIMAP サーバのドラフトフォルダにアップロードしてくれます。

プロジェクトへの貢献方法として、git imap-send を使ってパッチを送る例を ch05-distributed-git.asc で紹介しています。

git send-email

git send-email コマンドは、git format-patch コマンドで生成したパッチをメールで送信する際に使用されます。

ch05-distributed-git.asc では、git send-email ツールを使用して、パッチを送信してプロジェクトへ貢献する例を見てきました。

git request-pull

git request-pull コマンドは、単に誰かへのメールの本文の例を生成するのに使用されます。公開サーバにブランチがあり、メールでパッチを送信することなしにその変更点を取り込んでもらう方法を誰かに知ってもらいたい場合、このコマンドを実行して、変更点を取り込んでもらいたい人にその出力を送ることができます。

ch05-distributed-git.asc では、git request-pull を使用してプルメッセージを生成する実例を示しました。

外部システム

Gitには、他のバージョン管理システムと連携するためのコマンドがいくつか付属しています。

git svn

git svn コマンドは、Subversionバージョン管理システムに対して、クライアントとして通信をするのに使用されます。これは、Subversionサーバに対してチェックアウトしたりコミットしたりするのにGitを使用できることを意味しています。

ch09-git-and-other-scms.asc では、このコマンドについて詳細に取り上げました。

git fast-import

他のバージョン管理システム、または他の任意のフォーマットからのインポートにおいては、 git fast-import を使用して、他のフォーマットをGitが容易に記録できるフォーマットへ対応付けることができます。

ch09-git-and-other-scms.asc では、このコマンドについて詳細に取り上げました。

システム管理

Gitリポジトリのシステム管理をしていたり、大々的に何かを修正したい場合、Gitにはそれを支援するシステム管理用コマンドがいくつかあります。

git gc

git gc コマンドは、リポジトリ上で ``ガベージコレクション'' を実行し、データベース上の不要なファイルを削除するとともに、残ったファイルをより効率的なフォーマットへ詰め込み直します。

このコマンドは通常バックグラウンドで自動的に実行されますが、お望みなら手動で実行することもできます。ch10-git-internals.asc では、このコマンドのいくつかの例を見てきました。

git fsck

git fsck コマンドは、内部データベースに問題や不整合がないかチェックするのに使用されます。

このコマンドは、ch10-git-internals.asc で宙ぶらりんのオブジェクトを検索する際に一度使用しただけです。

git reflog

git reflog コマンドは、歴史を書き換える際に失われた可能性のあるコミットを探すため、ブランチのすべてのHEADがあった場所のログを見ていきます。

このコマンドは主に ch07-git-tools.asc で取り上げました。通常の使い方と、git log -g を使用して git log の出力で同じ情報を見る方法を示しました。

ch10-git-internals.asc では、失ったブランチの回復など実用的な例を見てきました。

git filter-branch

git filter-branch コマンドは、大量のコミットを、特定のパターンに従って書き換える際に使用されます。例えば、あるファイルを全てのコミットから削除する場合や、プロジェクトを抽出するためにリポジトリ全体を単一のサブディレクトリへフィルタリングする場合に使用します。

ch07-git-tools.asc では、このコマンドの説明を行いました。また、--commit-filter--subdirectory-filter--tree-filter などいくつかのオプションの使い方を見てきました。

ch09-git-and-other-scms.asc では、インポートした外部リポジトリの修正にこのコマンドを使用しました。

配管コマンド

本書では、低レベルな配管コマンドが何度も出てきています。

最初に ls-remote コマンドが出てきたのは ch06-github.asc でした。ここでは、サーバ上の生の参照を見るためにこのコマンドを使用しました。

ch07-git-tools.ascch07-git-tools.asc および ch07-git-tools.asc では、ls-files を使用して、ステージングエリアがどのようになっているかをより生に近い状態で見てきました。

ch07-git-tools.asc では rev-parse について言及しました。ここでは、任意の文字列を受け取ってオブジェクトのSHA-1へ変換するのに使用しました。

しかし、低レベルの配管コマンドのほとんどは、多かれ少なかれ、そこにフォーカスした章である ch10-git-internals.asc で取り上げられています。 また本書の他の大部分では、これらのコマンドを使用しないように努めました。