【Gitをしっかり理解】pullとmergeとfetchは一体何をしているのか?

Not image

みなさんは、Gitのpullコマンドを理解して使っていますか?

多くの方は、「pullをすればリモートリポジトリの変更をローカルリポジトリに持ってこれる・・・?」となんとなく使っているのではないでしょうか?

私自身も以前は、ふわっとpullコマンドを使っていました。

実際、理解せずに使うこともできると思います。

しかし理解して使うことで、いざという時に自分がやったことがわかります。その結果、問題を早く解決できるのです。

そこで今回は、Gitのpull・merge・fetchで何をしているのかを整理していこうと思います。

git pullは何をしているのか?

git pullコマンドは、ローカルリポジトリで現在作業中のブランチにリモートブランチからfetch(取得)してきて、その変更をローカルのブランチとmerge(統合)しているのです。

これだけだと、何を言っているのかわかりにくい(イメージしにくい)と思います。

しかしpullコマンドを理解するには、fetchコマンドとmergeコマンドをしっかり理解する必要があるということが、はっきりしました。

そう、「git pull = git fetch + git merge」という図式なのです。

よってここから、git pullコマンドをgit fetch・git mergeコマンドに分割してみていきましょう。

git fetchは何をしているのか?

git fetchコマンドは、リモートリポジトリのブランチ・コミットの情報を一緒にローカルリポジトリに取得するコマンドです。

ローカルのmasterブランチでfetchすると、origin/masterにリモートブランチの情報が取得され更新されます。

注意する点は、この段階ではローカルのmasterブランチは更新されていません。

そこで次に実行するのが、mergeコマンドです。

git mergeは何をしているのか?

mergeコマンドは、fetchコマンドより馴染みがあるのではないでしょうか。mergeという名前の通り、複数のものを結合する・統合するという意味です。今回の場合、「複数のもの」とは「複数のブランチ」ということになります。

git pullと同じ状態にするには、先ほどgit fetchしてきて変更したorigin/masterブランチとmasterブランチを統合(merge)します。

そうすることでローカルのmasterブランチがリモートブランチと同じ状態になります。

origin/masterブランチはよく、「追跡ブランチ」という風に呼ばれますので覚えておくと良いです。(今回は、リモートリポジトリ名がoriginであることが前提でorigin/masterと話しています。)

リモートブランチと追跡ブランチとローカルのブランチが混同してしまっている方は、以下の記事で確認してください。

今自分がやる操作が、どのブランチに対する操作なのかを理解できればGitの理解が格段に上がるので、ぜひ見てみてください!

【Gitをしっかり理解】追跡ブランチとリモートブランチは別物!

2018.10.17

まとめ

今回は、git pullというコマンドをgit fetchgit mergeに分けて整理してみました。

普段何気なくgit pullしている方は、今回の記事でgit pullの操作がしっかり頭でイメージできるようになったでしょうか?

これでコンフリクトが起きたときなどの問題が起きた際でも、慌てることはなく落ち着いて対応できると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です