【Git】pullは何をしているのか
目次
pullとは
pullとは、ローカルリポジトリとリモートリポジトリを同期
させる行為です。
git push とgit pull は対になっているコマンドに感じますが、実際に内部で行っている処理は、git pullのほうが複雑です。
git pushはクリーン(fast-forward)マージを強制されます。しかし、git pullの場合はクリーンマージができないケースがあります。(内部でコミットしている場合)
fetchとmerge
- fetch : リモートリポジトリのリファレンス(ブランチやタグ)をローカルリポジトリのリモート追跡ブランチ(FETCH_HEADの位置)を更新します。
- merge : 今いるブランチへ他のブランチを取り込みます。
pullは内部で何をしているのか
git pull
では、git fetch
からgit merge FETCH_HEAD
の順で処理をしています。
なぜ、merge
が発生するのかというと、gitではリモートの状態をローカル環境でリモート追跡ブランチとして、管理しています。このリモート管理ブランチの先頭を
FETCH_HEADとして定義しています。 つまり、リモート追跡ブランチを今いるブランチへマージすることで、リモートリポジトリの
FETCH_HEAD`の次のコミットを作ることで、ブランチを同期させています。
【Git】pullは何をしているのか