Git は、Team Foundation バージョン管理、Perforce、Subversion などの一元化されたバージョン管理システム (CVCS) とは根本的に異なる方法で履歴を表します。 一元化されたシステムでは、リポジトリ内のファイルごとに個別の履歴が格納されます。 Git では、履歴がリポジトリ全体のスナップショットのグラフとして格納されます。 Git の コミット と呼ばれるこれらのスナップショットには複数の親を含めることができます。これにより、直線ではなくグラフのような履歴が作成されます。 この歴史の違いは非常に重要であり、CVCS に慣れているユーザーが Git を混乱させる主な理由です。
コミット履歴の基本
単純な履歴の例から始めます。3 つの線形コミットを含むリポジトリ。
コミット A はコミット B の親であり、コミット B はコミット C の親です。この履歴は CVCS によく似ています。 コミット C を指す矢印は分岐です。 ブランチは特定のコミットへのポインターであるため、ブランチは Git で非常に軽量で簡単です。
GIT と CVCS の主な違いは、開発者が独自のリポジトリの完全なコピーを持っているということです。 リモート リポジトリから最新のコミットを取得して、ローカル リポジトリをリモート リポジトリと同期させる必要があります。 これを行うには、次のコマンドを使用してメイン ブランチをプルします。
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 つの分岐が同じコミットを指すようになりました。 E と F という 2 つの新しいコミットで、 cool-new-feature ブランチにいくつかの変更があるとします。
コミットは、そのブランチにコミットされているため、 cool-new-feature ブランチから到達可能です。
この機能が完了したら、メイン ブランチにマージする必要があります。 これを行うには、次のコマンドを使用します。
git merge cool-new-feature main
マージが発生すると、履歴のグラフ構造が表示されます。 Git は、ブランチが別のブランチにマージされるときに新しいコミットを作成します。 これはマージ コミットです。 競合がないため、このマージ コミットに含まれる変更はありません。 競合が発生した場合、マージ コミットには、それらを解決するために必要な変更が含まれます。
現実世界の歴史
チームでのアクティブな開発におけるコードによく似た Git 履歴の例を次に示します。
独自のブランチから main ブランチにコミットを同時にマージするユーザーは 3 人います。
次のステップ
GitHub と Azure Repos または Git ログ履歴の簡略化で Git 履歴を操作する方法の詳細について説明します。