みなさんは、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 pullというコマンドをgit fetchとgit mergeに分けて整理してみました。
普段何気なくgit pullしている方は、今回の記事でgit pullの操作がしっかり頭でイメージできるようになったでしょうか?
これでコンフリクトが起きたときなどの問題が起きた際でも、慌てることはなく落ち着いて対応できると思います。
コメントを残す