Git
Chapters ▾ 2nd Edition

A3.4 Appendix C: Gitのコマンド - ブランチとマージ

ブランチとマージ

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

git branch

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

Git のブランチ機能 のほとんどは branch コマンドに費やされており、この章の全体に渡って`branch` コマンドが使用されています。最初にこのコマンドを紹介したのは 新しいブランチの作成 で、そこで扱った以外の機能(一覧表示と削除)のほとんどは ブランチの管理 で見てきました。

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

最後に、Gitの参照 では、このコマンドがバックグラウンドで行っていることについて見てきました。

git checkout

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

このコマンドは、 ブランチの切り替え で、 git branch コマンドとともに初めて登場しました。

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

コンフリクトのチェックアウト では、 --conflict=diff3 を使用して、ファイルの衝突部分を再表示しました。

リセットコマンド詳説 では、git checkoutgit reset の関係の詳細を見てきました。

最後に、HEAD では、実装の詳細の一部を見てきました。

git merge

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

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

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

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

コミットへの署名 では、あなたのプロジェクトでGPG署名を使っている場合に、マージする前に署名を確認する方法を学びました。

最後に、サブツリーマージ では、サブツリーマージについて学びました。

git mergetool

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

マージ時のコンフリクト では、このコマンドについて簡単に言及しました。また、外部のマージツールおよび diff ツール では、独自の外部マージツールを実装する方法について詳細に見てきました。

git log

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

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

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

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

非公開な小規模のチーム および コミットの範囲指定 では、 git log コマンドで branchA..branchB 形式の構文を使用して、 他のブランチと比較して、あるブランチに固有のコミットはどれかを見る方法を取り上げました。コミットの範囲指定 では、かなり広範囲に渡ってこのコマンドを見てきました。

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

参照ログの短縮形 では、ブランチを走査する代わりにこのツールを使用してGit reflogを見るために -g オプションを使いました。

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

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

git stash

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

このコマンドの機能は基本的にすべて 作業の隠しかたと消しかた で取り上げました。

git tag

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

タグ では、このコマンドの紹介と詳細な説明を行いました。また、リリース用のタグ付け では、実際にこのコマンドを使用しました。

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