※前回のお話:マンガでわかる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における実施内容です。時期や環境によって、操作が異なることがあります。