Help us understand the problem. What is going on with this article?

【初心者向け】git fetch、git merge、git pullの違いについて

More than 1 year has passed since last update.

gitで手こずった時に色々ググってると、「git fetch」と「git pull」がぐちゃぐちゃになってしまったのでまとめておきます。

結論から言えば、「fetchもpullもリモートリポジトリの最新情報をローカルリポジトリへ持ってくる」という操作になりますが、それまでの流れが違うので説明していきます。

git fetch

リモートから最新情報をローカルに持ってくるのですが、場所は「master」ブランチではなく、「origin/master」ブランチに取り込まれます。

初めは「何それ知らない」となるのですが、具体的に言うと

  • 「master」ブランチ…ローカルの中心となる統合ブランチで、他のローカルの作業ブランチと繋がったもの。
  • 「origin/master」ブランチ…ローカルにある、リモートのmasterブランチを追跡するリモート追跡ブランチ

となります。

両方ともローカルにあるブランチで分かりにくいのですが、図でイメージするとこんな感じです。

fullsizeoutput_316.jpeg

ローカルの「master」ブランチの1歩先(リモート寄り)に「origin/master」ブランチがあって、git fetchではこの「origin/master」ブランチで最新情報を受け取ります。

それをローカルの「master」ブランチが貰えるようにgit fetch → git mergeをして、「origin/master」→「master」へ最新情報を持ってくるわけですね。ここまで処理を行うことで、ローカルのファイルが最新の状態に更新されます。

まとめると、

  • git fetch…リモートの「master」ブランチ → ローカルの「origin/master」ブランチ
  • git merge…ローカルの「origin/master」ブランチ → ローカルの「master」ブランチ

となります。

git pull

git pullは、上のgit fetch、git mergeを同時に行うコマンドです。そのため、リモートの「master」ブランチから、ローカルの「origin/master」ブランチを介して、ローカルの「master」まで一気に最新情報を持ってきます。

mergeまで一気に行なってしまうため、ローカルのブランチとコンフリクトが起きやすいのは、この理由なんですね。

まとめると、

  • git pull…リモートの「master」ブランチ →(ローカルの「origin/master」ブランチ→) ローカルの「master」ブランチ

となります。

コマンド例

$ git fetch origin master
$ git merge origin/master
$ git pull origin master

戻す方法

いろんな手段があると思いますが、パニックになる前に、とりあえず解決できそうなコマンドです。

まず、

$ git fetch

でエラーがあって元に戻したい時は、
まだローカルの「master」ブランチまで更新されていない(mergeされていない)ので、

$ git reset --hard HEAD

で直前のcommitまで戻して、無かった事にします。
これは簡単です。

そして、

$ git pull

でエラーがあって元に戻したい、コンフリクトを無くしたいという時は、

まずpull = fetch + mergeなので、mergeを

$ git merge --abort

で取り消します。その後は同じように

$ git reset --hard HEAD

で、直前のcommitまで戻して、無かった事にします。

コンフリクトの理由を把握し、うまく解決してmergeするのが1番ですが、それはまたいずれ違う記事で書きます。

参考記事

git fetchの理解からgit mergeとpullの役割
origin masterとorigin/masterの違い

wann
元アパレル店長 2019/06〜 Rails, AWS
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした