※前回のお話:マンガでわかるGit 第8話「GitHubを使ってみよう push・pull編」
pullの正体はfetch+mergeだった?


今までは、わかばちゃんは単純にこういうイメージでpush・pullをしていましたが…

↓ 実はこういう構造!

リモートブランチ
- リモートリポジトリの中にある
リモート追跡ブランチ
- ローカルリポジトリの中にある
- リモートブランチをローカルにミラーリング(コピー)しただけのもの
- 読み取り専用
ローカルブランチ
- ローカルリポジトリの中にある
- 普段コミットするブランチ




この2工程をまとめてやってくれるのがpull!

pullの正体はfetch+merge
マンガでわかるGit 8話にてpushとpullを学びましたね。
pullは、実はfetch(フェッチ)というコマンドとmerge(マージ)というコマンドを合わせたものです。
本当に、fetchとmergeを使えばpullと同じことができるのか、試してみましょう。
GitHub上で直接コミットする
まず、誰かがコミットしたという想定で、自分自身でリモートリポジトリに直接コミットしましょう。
編集したいファイルをクリックします。

ペンの形のアイコンをクリックします。

直接編集可能な画面になります。
ツイッターのリンクを追加してみます。

編集が終わったら、画面を下にスクロールしたところにある[commit changes]ボタンをクリックします。
編集した箇所が反映されています。

さて、ここでfetchしてみましょう。SourceTreeの[フェッチ]アイコンをクリックし、[OK]を押します。

リモートリポジトリで作った、4つ目のコミットがダウンロードされてきました!

![]()
この「origin/master」っていうのがリモート追跡ブランチなんだね!
ただしこの状態だとリモート追跡ブランチ(origin/master)にコミットがダウンロードされただけで、ローカルブランチ(master)は更新されていません。
そこで[マージ]アイコンをクリックします。

マージするコミットを選びます。リモート追跡ブランチ(origin/master)をクリックして選び、右下の[OK]ボタンをクリックします。

おめでとうございます!
これでリモートリポジトリとローカルリポジトリの状態が揃いました。

![]()
fetchのあとmergeをしたら、pullと同じ結果になった!
![]()
「pullの裏では、実はfetchとmergeが行われている」というのを意識しておくと、後々役に立つわよ
まとめ
fetch
fetchは、リモートリポジトリから更新内容をダウンロードしてきて、ローカルリポジトリ内のリモート追跡ブランチを更新する
- つまり、リモート追跡ブランチ(origin/ナントカ)が更新されるだけ
- この時点ではローカルブランチは更新されていない
merge
- mergeすることで、はじめてローカルブランチが更新される
pull
- 「fetchしてからmerge」は、開発の中で頻繁に行われる
- fetchとmergeを合わせた機能がpull
ブランチやマージについて詳しい解説は、書籍版に収録予定!

マンガでわかるGitの書籍化が決定いたしました!
Gitを初めて使うかたを対象に
- Gitの仕組み
- 基本編
- 実用編「こんなときはどうすればいい?」
といった内容を、マンガと図解で視覚的に解説します。
並行してCodeIQ MAGAZINEでのWeb連載も行なっていきます。
今後ともマンガでわかるGitをよろしくお願いします。
登場人物紹介

著者プロフィール
マンガ:湊川あい(みなとがわ あい)
フリーランスのWebデザイナー・マンガ家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。「マンガでわかるGit」書籍版発売中!
主な著書 わかばちゃんと学ぶ Webサイト制作の基本・わかばちゃんと学ぶ Git使い方入門・わかばちゃんと学ぶ Googleアナリティクス〈アクセス解析・Webマーケティング入門〉
Twitter: @llminatoll
※この記事は2016年11月25日時点、SourceTree2.0.5.5、Windows10 Proにおける実施内容です。時期や環境によって、操作が異なることがあります。











