次の方法で共有


Git の履歴を理解する

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

Git では、リポジトリ全体のスナップショット (コミットと呼ばれます) のグラフとして履歴が格納されます。 各コミットには、1 つ以上の前のコミットへのポインターも含まれます。 コミットには複数の親を含めることができるので、直線ではなくグラフのような履歴を作成できます。 この歴史の違いは非常に重要であり、ユーザーが Git を混乱させる主な理由です。

自分が行ったことがわかっている Git 履歴の変更が見つからない場合は、Git での Git 履歴の簡略化のしくみの詳細を確認してください。 変更が失われました。Git の履歴の簡略化を見てみましょう

コミット履歴の基本

単純な履歴の例から始めます。3 つの線形コミットを含むリポジトリ。

1 行に 3 つのコミット

コミット A はコミット B の親であり、コミット B はコミット C の親です。この履歴は CVCS によく似ています。 コミット C を指す矢印は分岐です。 Git リポジトリのメインライン ブランチの既定の名前であるため、 main という名前が付けられています。 ブランチは特定のコミットへのポインターであるため、ブランチは Git で非常に軽量で簡単です。

GITとCVCSの主な違いは、リポジトリの完全なコピーを自分で持っていることです。 リモートリポジトリから最新のコミットを取得して、ローカルリポジトリをリモートリポジトリと同期させる必要があります。 これを行うには、次のコマンドを使用してメインブランチをプルします。

git pull origin main

これにより、リモート リポジトリの main ブランチ (既定では origin と呼ばれます) からローカル リポジトリの main ブランチにすべてのコミットがコピーされます ("pulls")。 プル操作で 1 つの新しいコミットがコピーされ、ローカル リポジトリの main ブランチがこの新しいコミットを指すようになりました。

4 番目のコミット D が行に追加されます

ブランチ履歴を理解する

次に、コードを変更します。 一般的に、複数のアクティブブランチがあり、さまざまな機能に並行して取り組んでいます。 これは、新しいブランチが重く、ほとんど作成されない 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 ブランチにいくつかの変更を加えます。

2 つの新しいコミットを追加しました

そのブランチでコミットを作成したので、 cool-new-feature ブランチからコミットに到達できます。 機能を使い終えて、 mainにマージしたいと考えています。 これを行うには、次のコマンドを使用します。

git merge cool-feature main

マージ後

マージが発生すると、履歴のグラフ構造が表示されます。 ブランチを別のブランチにマージすると、Git によって新しいコミットが作成されます。 これはマージ コミットです。 競合がないため、このマージ コミットに変更は含まれません。 競合が発生した場合、マージ コミットには、それらの競合を解決するために必要な変更が含まれます。

現実世界の歴史

チームでのアクティブな開発におけるコードによく似た Git 履歴の例を次に示します。 同時に、独自のブランチからメインブランチにコミットをマージする人が3人います。

git graph のコンソール ログ

分岐とマージによってグラフの形状がどのように作成されるかを理解したので、これはあまり怖くはありません。