1
/
5

5分でわかる!git fetch


はじめに

FM_Harmonyです、8月2回目の投稿になります。
↓前回の記事はコチラです


新卒社員&ベトナムメンバーの歓迎会を開催いたしました! - RAKUS Developers Blog | ラクス エンジニアブログ
エンジニアのFM_Harmonyです。 Rakus Developers Blogには、何度か記事を投稿させていただきました。 tech-blog.rakus.co.jp ↑前回の投稿記事はこちらです さて、今年も早いもので7月初旬に開発部へ新卒社員が配属されました。 また、同時期にオフショア先の ベトナム 子会社から出張者の受け入れを行いました。 そこで先日、新卒社員& ベトナムメンバーの歓迎会を開催いたしました! 歓迎会の内容をまとめましたので、みなさまに ラク ス社内の雰囲気が伝われば幸いです。 ま
http://tech-blog.rakus.co.jp/entry/20180803/event/welcome-party

今回はgitコマンドのfetchについて、学んだ内容をまとめてみました。
今回の記事を書こうと思ったきっかけはpullとfetchの違い
について尋ねられた時、細かいところまで答えられなかったことです。
(大雑把にfetchはデータを持ってくるだけ、pullはmergeまで行う
ということまでは答えられたのですが...)

そこで、この機会にfetchについて学びなおしてみました。
Gitを学び始めたばかりの方や、復習したいと考えている方の参考になれば幸いです。

fetchの説明...の前にリモート追跡ブランチの説明

fetchを説明するうえでリモート追跡ブランチの説明は欠かせません。
では、リモート追跡ブランチとは何でしょうか?

リモート追跡ブランチ(Remote-tracking branch)とは、ローカルリポジトリにあってリモートリポジトリの状態を保持する参照です。
簡単に言うと、リモートにある同名のブランチと同一のコミットを指すブランチの事です。
このブランチの特徴として、リモート追跡ブランチのブランチ名は(リポジトリ名)/(リモートのブランチ名)で固定される、ユーザが変更をコミットするなどしてブランチが指すコミットを直接操作することはできない、といったことが挙げられます。

そのため、ローカルリポジトリからもリモート追跡ブランチを通じて、リモートリポジトリの変更を確認する、ローカルの作業ブランチにリモートの変更を取り込むといったことができるようになっています。

しかし、ローカルリポジトリは24時間365日ネットワークに接続はしていません。
そのため、ローカルリポジトリにあるリモート追跡ブランチは常にリモートのブランチと同じものを指すわけではありません。
誰かがリモートのブランチに変更をpushしてしまうと、リモート追跡ブランチとリモートにある同名のブランチが指すコミットが異なるということが発生します。

この状況を解消するために使うコマンドがfetch
なのです!

本題、fetchの説明

fetchコマンドを利用することで、リモートリポジトリの変更をローカルリポジトリに取り込み、リモート追跡ブランチを同期することができます。

例えば、下記のコマンドを利用すると、リモートリポジトリorigin
master
ブランチについて、変更をローカルリポジトリに取り込み、リモート追跡ブランチorigin/master
をリモートブランチmaster
と同期させます。

この時点では、ローカルの作業ブランチに変更は反映されません。
そのため、例えばローカルのブランチmaster
に対してコミットを行っていた場合、リモート追跡ブランチとローカルのブランチとが分岐することになります。

merge, pullの説明

さて、こうして取り込んだリモートブランチの変更をローカルブランチに反映するにはどうすればよいでしょうか?
その方法の一つとして、ローカルブランチにリモート追跡ブランチをmergeするという方法があります。

例えば、origin/master
とローカルブランチmaster
が分岐する場合、下記のコマンドを実行することで図のようなブランチ構造になります。

また、同じコマンドを実行した場合でも、origin/master
がローカルブランチの先のコミットを指しているだけで分岐していない場合、master
の指すコミットを変更するだけのいわゆるFast-forwardマージを行います。

別の方法として、pull
コマンドを利用するというものがあります。
これは、fetch + merge
と同じ動作を行います。

すなわち、

おわりに

fetchについて簡単にまとめてみたのですが、いかがでしたでしょうか。
個人的にはリモート追跡ブランチの存在を知らなかったため、この機会に知ることができて良かったと思います。

今回の記事作成を通して、Gitについてまだまだ知識が足りないことが分かったので、また別の機会に他の操作(addやpush, etc...)について、機会を作って調べてみようと思います。

株式会社ラクスでは一緒に働く仲間を募集しています
今週のランキング
株式会社ラクスからお誘い
この話題に共感したら、メンバーと話してみませんか?