git fetch と git pull の理解を深めるには、git remote、git merge、リモートリポジトリ、ブランチ、コミットID、および FETCH_HEAD について詳しく説明する必要があります。
-
git remote:元々、git は分散型の構造を持つため、ローカルとリモートは相対的な名前です。ローカルのリポジトリとリモートのリポジトリがバージョンに対応するためには、git remote サブコマンドが必要で、
git remote add
を使用してローカルの長さに合ったリモートリポジトリを追加する必要があります。この操作を実行することで、ローカルのリポジトリはgit push
を実行するとコードをどこに送信すべきかを知ることができます。 -
git branch:次に、git は複数のバージョンのブランチ管理のために作成されたものであり、ブランチ管理には本質的に関連しています。ブランチは、ソフトウェアの特定のリリースバージョンを独自に記録するためのものです。Git が分散型であるため、ローカルブランチとリモートブランチが存在します。
git branch
を使用してローカルブランチを表示し、git branch -r
を使用してリモートブランチを表示できます。git push
時には、ローカルブランチとリモートブランチを交互に指定でき、バージョンの競合が発生しない限り、選択が柔軟です。 -
git merge:さらに、git の分散構造は、異なる機能モジュールを複数の人が協力して開発する場合に非常に適しています。各メンバーが独自のブランチで相対的に独立したモジュールを開発する場合、リリースごとに各メンバーのモジュールをマージして統合する必要があります。この場合、
git merge
が必要です。 -
git push とコミットID:ローカル作業が完了するたびに、
git commit
を実行して現在の作業をローカルのリポジトリに保存します。この操作により、コミットIDが生成され、これはバージョンを一意に識別するためのシーケンス番号です。git push
を使用すると、このシーケンス番号はリモートリポジトリにも同期されます。
上記の git の要素を理解したら、git fetch と git pull を分析するのはもはや難しくありません。
最初に、git fetch には次の4つの基本的な用法があります:
-
git fetch
:これにより、git remote
に含まれるすべてのリモートリポジトリに含まれるブランチの最新のコミットIDが更新され、それらは.git/FETCH_HEAD
ファイルに記録されます。 -
git fetch remote_repo
:これにより、remote_repo
という名前のリモートリポジトリ上のすべてのブランチの最新のコミットIDが更新され、それらが記録されます。 -
git fetch remote_repo remote_branch_name
:これにより、remote_repo
という名前のリモートリポジトリ上のremote_branch_name
という名前のブランチが更新されます。 -
git fetch remote_repo remote_branch_name:local_branch_name
:これにより、remote_repo
という名前のリモートリポジトリ上のremote_branch_name
という名前のブランチが更新され、ローカルにlocal_branch_name
という名前のローカルブランチが作成され、リモートブランチのすべてのデータが保存されます。
FETCH_HEAD:これはバージョンリンクで、現時点でリモートリポジトリから取得したブランチの末尾バージョンを指すローカルのファイルです。
git pull の動作:
git pull:最初に、ローカルの FETCH_HEAD の記録に基づいて、ローカルの FETCH_HEAD の記録とリモートリポジトリのバージョン番号を比較し、その後 git fetch を使用して現在指しているリモートブランチの後続バージョンのデータを取得し、それをローカルの現在のブランチにマージします。
コメント欄