【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`の次のコミットを作ることで、ブランチを同期させています。

Author

Daiki Iijima

Posted on

2021-04-02

Updated on

2024-04-17

Licensed under