Git 履歴について
Git は、Team Foundation Version Control、Perforce、Subversion などの集中バージョン管理システム (CVCS) とは根本的に異なる方法で履歴を表します。 集中管理システムは、ファイルごとに個別の履歴をリポジトリに保存します。 Git は、履歴をリポジトリ全体のスナップショットのグラフとして保存します。 Git では commit と呼ばれるこれらのスナップショットには複数の親を持つことができ、直線ではなくグラフのような履歴が作成されます。 この歴史の違いは非常に重要であり、CVCS に慣れているユーザーが Git を混乱させる主な理由です。
コミット履歴の基本
単純な履歴の例 (3 つの線形コミットを含むリポジトリ) から始めます。
コミット A はコミット B の親であり、コミット B はコミット C の親です。この履歴は CVCS とよく似ています。 コミット C を指す矢印はブランチです。 ブランチは特定のコミットへのポインターであるため、Git ではブランチが非常に軽量で簡単です。
CVCS と比較した Git の主な違いは、開発者が独自のリポジトリの完全なコピーを持っていることです。 リモート リポジトリから最新のコミットを取得することで、ローカル リポジトリとリモート リポジトリの同期を保つ必要があります。 これを行うには、次のコマンドを使用してメイン ブランチをプルします。
git pull origin main
これにより、メイン ブランチからのすべての変更がリモート リポジトリにマージされます (Git ではデフォルトで origin
という名前が付けられます)。 このプルにより 1 つの新しいコミットが導入され、ローカル リポジトリのメイン ブランチがそのコミットに移動します。
ブランチ履歴を理解する
次に、コードを変更します。 異なる機能を並行して作業する場合、複数のアクティブなブランチが存在するのが一般的です。 これは、新しいブランチが重く、ほとんど作成されない CVCS とはまったく対照的です。 最初の手順は、次のコマンドを使用して新しいブランチにチェックアウトすることです。
git checkout -b cool-new-feature
これは 2 つのコマンドを組み合わせたショートカットです。
git branch cool-new-feature
ブランチを作成するgit checkout cool-new-feature
ブランチで作業を開始する
2 つのブランチが同じコミットを指すようになりました。 2 つの新しいコミット E と F のcool-new-feature
ブランチにいくつかの変更があるとします。
コミットは cool-new-feature
ブランチにコミットされているため、そのブランチから到達できます。
機能が完成したので、メイン ブランチにマージする必要があります。 これを行うには、次のコマンドを使用します。
git merge cool-new-feature main
マージがあると、履歴のグラフ構造が表示されます。 ブランチが別のブランチにマージされると、Git は新しいコミットを作成します。 これがマージ コミットです。 競合がなかったため、このマージ コミットには変更は含まれません。 競合があった場合、マージ コミットには競合を解決するために必要な変更が含まれます。
実際の履歴
ここでは、チームでのアクティブな開発のコードによく似た Git 履歴の例を示します。
ほぼ同時に自分のブランチから main
ブランチにコミットをマージする 3 人がいます。
次のステップ
Git 履歴の操作について詳しくは、GitHubとAzure Repos または Git ログ履歴の簡素化をご覧ください。