章 ▾ 第2版

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

ブランチとマージ

Gitのブランチとマージ機能のほとんどを実装するコマンドはごくわずかです。

git branch

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

Gitブランチのほとんどはbranchコマンドに特化しており、章全体で使用されています。最初に新しいブランチの作成で紹介し、そのほとんどの他の機能(一覧表示と削除)についてはブランチ管理で詳しく説明しています。

追跡ブランチでは、追跡ブランチを設定するためにgit branch -uオプションを使用します。

最後に、Gitリファレンスでそのバックグラウンドでの動作についていくつか説明します。

git checkout

git checkoutコマンドは、ブランチを切り替えたり、内容を作業ディレクトリにチェックアウトしたりするために使用されます。

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

追跡ブランチ--trackフラグを使って追跡ブランチを開始する方法を見ていきます。

競合のチェックアウトでは、--conflict=diff3を使ってファイル競合を再導入するためにこれを使用します。

リセットの解明では、git resetとの関係についてさらに詳しく説明します。

最後に、HEADで実装の詳細についていくつか説明します。

git merge

git mergeツールは、チェックアウトしているブランチに1つ以上のブランチをマージするために使用されます。その後、現在のブランチをマージの結果に進めます。

git mergeコマンドは基本的なブランチで初めて紹介されました。このコマンドは書籍の様々な場所で使用されていますが、mergeコマンドのバリエーションは非常に少なく、通常はマージしたい単一ブランチの名前を指定するだけのgit merge <branch>です。

フォークされた公開プロジェクトの最後に、スカッシュマージ(Gitは作業をマージするが、マージするブランチの履歴を記録せずに単なる新しいコミットであるかのように見せかける)を行う方法を説明しました。

高度なマージでは、-Xignore-space-changeコマンドや、問題のあるマージを中止するための--abortフラグなど、マージプロセスとコマンドについて詳しく説明しました。

プロジェクトでGPG署名を使用している場合、コミットの署名でマージ前に署名を検証する方法を学びました。

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

git mergetool

git mergetoolコマンドは、Gitでのマージに問題がある場合に、単に外部マージヘルパーを起動します。

基本的なマージの競合で簡単に触れ、外部マージおよび差分ツールで独自の外部マージツールを実装する方法について詳しく説明しています。

git log

git logコマンドは、プロジェクトの到達可能な記録された履歴を最新のコミットスナップショットから遡って表示するために使用されます。デフォルトでは現在いるブランチの履歴のみを表示しますが、異なる、または複数のヘッドやブランチを指定して辿ることもできます。また、コミットレベルで2つ以上のブランチ間の差異を表示するためにも頻繁に使用されます。

このコマンドは、書籍のほぼすべての章でプロジェクトの履歴をデモンストレーションするために使用されています。

このコマンドはコミット履歴の参照で紹介し、ある程度深く掘り下げています。そこでは、各コミットで何が導入されたかを把握するための-p--statオプション、そして履歴をより簡潔に表示するための--pretty--onelineオプション、さらに簡単な日付と著者によるフィルタリングオプションを見ていきます。

新しいブランチの作成では、--decorateオプションを使ってブランチポインタの位置を簡単に視覚化し、--graphオプションを使って分岐した履歴がどのように見えるかを確認します。

小規模プライベートチームコミット範囲では、branchA..branchBという構文を使ってgit logコマンドを使い、あるブランチに対して他のブランチにユニークなコミットを見る方法を説明します。コミット範囲では、これをかなり広範囲にわたって説明しています。

マージログトリプルドットでは、branchA…​branchB形式と--left-right構文を使って、どちらかのブランチには存在するが両方には存在しないものを見る方法を説明します。マージログでは、マージ競合のデバッグに役立つ--mergeオプションの使用方法や、履歴中のマージコミットの競合を確認するための--ccオプションの使用方法も見ていきます。

Reflogの短縮名では、ブランチトラバーサルを行う代わりに、このツールを通じてGit reflogを表示するために-gオプションを使用します。

検索では、-S-Lオプションを使って、関数の履歴を見るなど、コードで歴史的に何が起こったかについてかなり洗練された検索を行う方法を見ていきます。

コミットの署名では、--show-signatureを使用して、各コミットが有効に署名されているかどうかに基づいて、git logの出力に検証文字列を追加する方法を見ていきます。

git stash

git stashコマンドは、ブランチ上で未完了の作業をコミットすることなく、作業ディレクトリをクリーンアップするために、コミットされていない作業を一時的に保存するために使用されます。

これは基本的にスタッシュとクリーンで完全にカバーされています。

git tag

git tagコマンドは、コード履歴の特定の時点に永続的なブックマークを付けるために使用されます。一般的に、これはリリースなどのために使用されます。

このコマンドはタグ付けで導入され、詳しく説明されており、リリースのタグ付けで実際に使用します。

作業の署名では、-sフラグを使ってGPG署名付きタグを作成し、-vフラグでそれを検証する方法も説明しています。

scroll-to-top