マンガでわかるGit 9話「pullの正体はfetch+mergeだった?」

※前回のお話:マンガでわかるGit 第8話「GitHubを使ってみよう push・pull編

pullの正体はfetch+mergeだった?


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

↓ 実はこういう構造!

リモートブランチ

  • リモートリポジトリの中にある

リモート追跡ブランチ

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

ローカルブランチ

  • ローカルリポジトリの中にある
  • 普段コミットするブランチ




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

8,568通り、あなたはどのタイプ?

pullの正体はfetch+merge

マンガでわかるGit 8話にてpushとpullを学びましたね。

pullは、実はfetch(フェッチ)というコマンドとmerge(マージ)というコマンドを合わせたものです。

本当に、fetchとmergeを使えばpullと同じことができるのか、試してみましょう。

8,568通り、あなたはどのタイプ?

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における実施内容です。時期や環境によって、操作が異なることがあります。

PC_goodpoint_banner2

Pagetop