Git 履歴について
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Git には、リポジトリ全体のスナップショット (コミット) のグラフとして履歴が格納されます。 各コミットには、1 つ以上の以前のコミットへのポインターも含まれます。 コミットには複数の親を含めることができ、直線ではなくグラフのような履歴が作成されます。 この履歴の違いは非常に重要であり、ユーザーが Git を理解しにくいと感じる主な理由です。
注意
自分が行ったことがわかっている Git 履歴の変更が見つからない場合は、Git で自分の変更が見つからない:Git の履歴の簡略化を見てみるで、Git 履歴の簡略化がどのように機能するかに関する詳細情報を確認してください。
コミット履歴の基本
単純な履歴の例 (3 つの線形コミットを含むリポジトリ) から始めます。
コミット A はコミット B の親であり、コミット B はコミット C の親です。この履歴は CVCS とよく似ています。
コミット C を指す矢印はブランチです。
main
という名前が付けられているのは、これが Git リポジトリ内のメインライン ブランチの既定名であるためです。
ブランチは特定のコミットへのポインターであるため、Git ではブランチが非常に軽量で簡単です。
Git と CVCS の主な違いは、リポジトリの完全なコピーを自分が持っていることです。 リモート リポジトリから最新のコミットを取得して、ローカル リポジトリとリモート リポジトリの同期を保つ必要があります。 これを行うため、次のコマンドを使用してメイン ブランチをプルします。
git pull origin main
これにより、リモート リポジトリの main
ブランチ (既定では origin
と呼ばれる) からローカル リポジトリの main
ブランチにすべてのコミットがコピー ("プル") されます。 プル操作によって 1 つの新しいコミットがコピーされ、ローカル リポジトリ内の main
ブランチがこの新しいコミットを指すようになりました。
ブランチ履歴を理解する
次に、コードを変更します。 複数のアクティブなブランチがあり、さまざまな機能を並行して作業するのが一般的です。 これは、新しいブランチが重く、ほとんど作成されない 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
ブランチで作成したため、そのブランチから到達できます。
特徴が完成したので、main
にマージします。
これを行うには、次のコマンドを使用します。
git merge cool-feature main
マージがあると、履歴のグラフ構造が表示されます。 ブランチを別のブランチにマージすると、Git によって新しいコミットが作成されます。 これがマージ コミットです。 競合がなかったため、このマージ コミットに変更は含まれていません。 競合が発生した場合、マージ コミットには、それらの競合を解決するために必要な変更が含まれます。
実際の履歴
以下は、チームでのアクティブな開発のコードによく似た Git 履歴の例です。 ほぼ同時に自分のブランチからメイン ブランチにコミットをマージする人が 3 人います。
これで分岐とマージによってグラフの形状がどのように作成されるかを理解したので、恐れる必要はありません。