LoginSignup
214
203

More than 3 years have passed since last update.

【古い情報です】 pull は本当に fetch + merge なの?

Last updated at Posted at 2014-11-28

※ 【追記】もうだいぶ古い情報です。

Git の pull は fetch + merge と同じというのをよく目にしますが、自分の中では違う気がしていて混乱しているので整理してみます。
認識が誤っている点などがございましたら、ご指摘いただければ幸いです。

3種類のブランチ

この記事では Git の 3 種類のブランチを以下のように表現します。

  • リモートブランチ
  • トラッキングブランチ
  • ローカルブランチ

リモートブランチ

リモートのリポジトリで定義されているブランチのことを指します。

トラッキングブランチ

リモートブランチを追跡するローカルリポジトリで定義されているブランチを指します。

ローカルブランチ

ブランチを切ったり、コミットなどをしていく実際に作業をするローカルリポジトリで定義されているブランチを指します。
これらを図にすると以下のような感じです。

1.png

fetch + merge の挙動

git fetch はリモートブランチの内容を取得し、トラッキングブランチに反映します。
git fetch originを実施した場合は以下の図のようになります。

3.png

git merge でトラッキングブランチをローカルブランチに反映します。
git merge origin/masterを実施した場合は以下の図のようになります。

5.png

このように fetch + merge をすると、トラッキングブランチを経由してリモートブランチの内容をローカルブランチに反映させることができます。

pull の挙動

git pull はリモートブランチの内容を直接ローカルブランチに反映します。
git pull origin masterを実施した場合は以下の図のようになります。

7.png

前述した fetch + merge とは異なり、pull の場合はトラッキングブランチにはリモートブランチの内容が反映されていません。
ですので、pull は fetch + merge と同じであると表現するのは違う気がしています。

追記 (2014/11/28)

上記の調査で動作確認したのはgit pull origin <ブランチ名>だけだったのですが、git pull originだとトラッキングブランチにもリモートの内容が反映されます。

なので、git pull originは fetch + merge と同じ挙動であるという表現は誤っていないと思います。

このように自己解決しましたが、ログとして文章はこのまま残しておきます。

追記 (2019/11/13)

git version 2.12.0 では git pull origin master でも origin/master が更新されているというコメントをいただきました。

現状は pull の挙動についてはこの記事の情報は参考になりませんが、3種類のブランチがあることの理解になれば幸いです。

214
203
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
214
203