エンジニアの転職を支援するFEnetインフラのテックブログ。ネットワークなどのITインフラ情報を中心に発信中。

  1. FEnetインフラ
  2. FEnetテックマガジン
  3. エンジニア
  4. git pullの概要|git pullコマンドが実行する2つのコマンド

git pullの概要|git pullコマンドが実行する2つのコマンド

  • エンジニア
  • プログラミング
公開日時:   更新日時:
git pullの概要|git pullコマンドが実行する2つのコマンド
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>
    最新情報や関心のある情報を毎日お届け。  FEnetインフラメールマガジン    メルマガ登録はこちらから>>

    git pull


    git pullとはリモートリポジトリの内容をローカルリポジトリに反映するコマンドのことです。コマンドを実行する時は

    と記載します。git pullについて概要を説明すると、このような説明になります。

    しかし、この記事ではgit pullについての概要についての説明に留まらず、リポジトリについての説明、git pullコマンドが実行される時に実行する2つのコマンドであるgit fetchコマンドとgit mergeコマンドについて説明します。

    さらには実運用のためにgit pullコマンド実行後に使うコマンドや実例についてまで説明し、開発者の方が実務に役立てるようになることを目論んだ内容の記事を書きます。

    リポジトリとは

    リポジトリには、リモートリポジトリとローカルリポジトリの2種類のリポジトリが存在します。リモートリポジトリとローカルリポジトリがどのようなリポジトリなのかを説明します。

    リモートリポジトリとは

    リモートリポジトリとはサーバ上のリポジトリであり、共用のリポジトリです。各ローカルユーザーの変更内容が、リモートリポジトリで管理されます。

    ローカルリポジトリとは

    ローカルリモートリポジトリとはローカルで各ユーザーが作業するリポジトリのことです。各ローカルユーザーは、ローカルリポジトリでの変更内容をリモートリポジトリに反映し、リモートリポジトリより他のユーザーの変更内容をローカルリポジトリに取得します。

    ローカルリモートリポジトリはリモート追跡ブランチとローカルブランチより構成されます。リモート追跡ブランチとローカルブランチについては後述します。

    git pullコマンドが実行する2つのコマンド

    git pullコマンドはそれ自体に留まらず、git pullコマンドが実行される時に実行する2つのコマンドを理解しておくと、理解が正確です。

    git pullコマンドが実行される時に実行する2つのコマンドであるgit fetchコマンドとgit mergeコマンドについて説明します。

    git fetchコマンドとは

    git fetchコマンドとは、git pullコマンドが実行される時に実行されるコマンドの1つで、リモートリポジトリの内容をローカルリポジトリのリモート追跡ブランチに反映するコマンドのことです。

    リモート追跡ブランチとは、ローカルリポジトリで各ローカルユーザーが作業するブランチではなく、リモートリポジトリの内容のコピーを持つブランチのことです。

    git mergeコマンドとは

    git mergeコマンドとは、git fetchコマンドでリモートリポジトリの内容をリモート追跡ブランチに反映した内容を、ローカルブランチに反映するコマンドのことです。

    ローカルブランチとは、ローカルリポジトリで各ローカルユーザーが作業するブランチです。各ローカルユーザーは、git mergeコマンドでローカルブランチに反映された内容に対して作業します。

    git pullコマンド実行後に使うコマンド

    gitを参照目的だけに使用するのであれば、リモートリポジトリの内容をローカルリポジトリに反映する操作のみを理解しておけば良いですが、開発者の方はローカルリポジトリの内容にソースを追加したり、削除したり、更新することがあると思います。

    そのため、git pullコマンド実行後に使うコマンドである、git addコマンド、git rmコマンド、git commitコマンド、git pushコマンドについて説明します。

    git addコマンドとは

    git addコマンドとは、ローカルリポジトリでソースファイルを新規作成した時等に、ソースファイルをインデックスに追加するコマンドのことです。インデックスに追加されたファイルはローカルリポジトリに登録されるわけではないので注意が必要です。

    インデックスに追加されたファイルをローカルリポジトリに登録するには、後述するgit commitコマンドを実行する必要があります。

    エクスプローラー上でファイルを新規作成すれば、エクスプローラーにおいてはファイルが追加されますが、gitにおいてファイルが追加されたことを示すためにはgit addコマンドを実行する必要があります。

    git rmコマンドとは

    git rmコマンドとは、ローカルリポジトリでソースファイルを削除した時等に、ファイル削除したことをローカルリポジトリに反映するコマンドです。

    エクスプローラー上でファイルを削除すれば、エクスプローラーにおいてはファイルが削除されますが、gitにおいてファイルが削除されたことを示すためにはgit rmコマンドを実行する必要があります。

    git commitコマンドとは

    git commitコマンドとは、各ローカルユーザーがローカルで作業した内容をローカルリポジトリに反映するコマンドです。

    前述したgit addコマンドでインデックスに追加されたファイルもgit commitコマンド実行により、ローカルリポジトリに反映されます。git commitコマンドを実行した段階では、リモートリポジトリは更新されません。

    git pushコマンドとは

    git pushコマンドとは、ローカルリポジトリの内容をリモートリポジトリに反映するコマンドです。実運用ではgit commitコマンドを実行した後に、git pushコマンドを実行する流れとなります。

    実例を通して考える

    実例として、リモートリポジトリA、ローカルリポジトリB、ローカルリポジトリCが存在するとし、ローカルリポジトリBでは機能1及び機能2の開発が行われ、ローカルリポジトリCでは機能3及び機能4の開発が行われるとします。

    ローカルリポジトリBのユーザーは、ローカルリポジトリBで機能1及び機能2に対して新規作成したファイルをgit addしたり、変更した内容をgit comiit→git pushしリモートリポジトリに反映したりします。

    ローカルリポジトリCのユーザーは、ローカルリポジトリBのユーザーがgit pushした内容を、git pullしてリモートリポジトリの内容をローカルリポジトリCに反映することにより、機能1及び機能2の内容をローカルリポジトリCに取り込めます。

    また、機能3及び機能4についても同様に考えられます。ローカルリポジトリCのユーザーは、ローカルリポジトリCで機能3及び機能4に対して新規作成したファイルをgit addしたり、変更した内容をgit comiit→git pushしたりします。

    不要なファイルがローカルリポジトリCに存在した場合は、git rmコマンドを用いることもあります。

    ローカルリポジトリBのユーザーは、ローカルリポジトリCのユーザーがgit pushした内容を、git pullしてリモートリポジトリの内容をローカルリポジトリBに反映することにより、機能3及び機能4の内容をローカルリポジトリBに取り込めます。

    実例を通して応用的な問題について考える

    前段落で述べた例で、ローカルリポジトリBのユーザーが機能5のファイルA内のAAAというファンクションに変更を加え、同時にローカルリポジトリCのユーザーが機能5のファイルA内のAAAというファンクションに変更を加えていたとします。

    ローカルリポジトリBのユーザーが機能5のファイルAに加えた内容をリモートリポジトリAに反映した後に、ローカルリポジトリCのユーザーがファイルAをリモートリポジトリAに反映しようとするとコンフリクトという変更内容の競合現象が生じます。

    コンフリクトが生じると、ローカルリポジトリCのユーザーは変更内容をリモートリポジトリAに反映できません。

    ローカルリポジトリCのユーザーは、どのようにオペレーションすれば競合現象が防げたかについて記載します。

    まず、ローカルリポジトリBのユーザーがリモートリポジトリAに反映した内容をgit pullし、ローカルリポジトリCに反映させた後に、機能5のファイルA内のAAAというファンクションに変更を加えると、変更内容の競合現象が防げたと言えます。

    git pull記事総括

    記事の内容について理解して頂けましたでしょうか?gitを操作していると何か操作に詰まることもあると思いますが、この記事は開発者の方が実務に役立てるようになることを目論んだ内容となっていますので、操作に詰まった時はもう一度この記事を読んで頂けると何かヒントが見つかるかもしれません。

    FEnetを運営しているネプラス株式会社はサービス開始から10年以上
    『エンジニアの生涯価値の向上』をミッションに掲げ、
    多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
    ネプラス株式会社ロゴ

    ネプラス株式会社はこんな会社です

    秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • インフラ業界に特化

      インフラ業界に特化

      ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。

      業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。

    • 正社員なのにフリーランスのような働き方

      正社員なのにフリーランスのような働き方

      正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。

      プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。

    • 大手直取引の高額案件

      大手直取引の高額案件

      案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。

      Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。

    • スキルアップ支援

      スキルアップ支援

      不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。

      受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など

      ※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。

    • 現給与を保証します!

      100%現給与保証

      前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。

      ※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。

    • インセンティブ制度

      インセンティブ制度

      ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。

      取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。

    • 社会保険・福利厚生

      社会保険・福利厚生

      社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。

      さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    ネプラス株式会社に興味を持った方へ

    ネプラス株式会社では、インフラエンジニアを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    ネプラス株式会社へのご応募はこちら↓
    ネプラス株式会社へのご応募はこちら↓

    新着案件New Job