はじめに
こんにちは、watnowの竹内です。GitHubユーザーの方なら必ず使ったことがあるといっていいほどよく使われるgit fetch, git pullコマンドですが、結構なんとなく使ってませんか?GitHub初心者の私はGitHubを使う度にこのコマンドを呪文のように唱えていますが、何やってるのかわからないまま呪文唱えるのって結構いやですよね…。そこで今回、この呪文で何をやっているのか初心者なりにまとめてみました。
基本的なコマンド
origin, origin/mainの違いってなに
git fetch, git pullの本格的な説明の前に必要な知識を学びます。
git fetchを使ったことのある人は見たことありますよね?
git fetch originとかgit pull origin/developとかって使われ方をしているoriginのことです。なんかどっちもブランチっぽい名前しとるけど俺作った記憶ねーよ!って毎回思ってました。
簡潔にいうと
origin -> リモートリポジトリ
origin/main -> origin(リモートブランチ)のmainを追跡するブランチ
のことを指します。
少しわかりにくいかもですが図で表すとこんな感じです
リモートブランチを追跡するブランチとはどういうことでしょうか?
リモート追跡ブランチ
図をみてもらうとわかりますが、リモート追跡ブランチはローカルリポジトリ内に存在するブランチの一種です。私たちは普段自分でやった作業を記録していくローカルブランチとみんなでやったことを統合していくリモートブランチを同期させていくことでチーム開発を可能にしています。この同期作業をなんかいい感じに手伝ってくれてるのがリモート追跡ブランチです。
この追跡ブランチが存在しなかった場合、リモートブランチの最新の状態の把握や差分の把握がかなりめんどくさくなります。
git fetchとgit pull
ここまでやってしまえばgit fetchとgit pullの説明は簡単です。
2つともローカルに情報をもってくるコマンドだということは皆さん知っていると思いますが、この2つのコマンドの違いはなんでしょうか?
答えは「ローカルのどこまで情報を持ってきているのか」です。
図を見ればわかる通りgit fetchはリモート追跡ブランチに情報をもってきているのに対してgit pullはローカルブランチまで情報をもってきます。
チーム開発でよくあるケースを考える
他のメンバーのPRを手元で確認したいとき
-
git fetchコマンドをつかうgit fetch origin git checkout origin/bgit fetch originでリモートの情報をリモート追跡ブランチにもってきます
その後git checkout origin/bを実行することでリモート追跡ブランチにもってきた最新の情報をみることができます -
確認したいブランチがローカルにあるとき

git pullコマンドをつかうgit checkout b git pull origin b
リモートにあるブランチで作業したいとき
git fetch origin
git checkout b
(補足)
checkoutを普段使っている人が、ここまでの解説を読むとこのコマンドでリモートにあるブランチをローカルにもってきて作業できることに違和感があるかもしれません。これまでの解説通りであればbブランチはまだローカルに存在していないためcheckoutできないのではないかという疑問がうまれます。fetchを実行した段階では新しいブランチの情報はリモート追跡ブランチまでしか反映されていません。
ただしcheckoutを実行した段階でgit が以下の操作を行ってくれます。
- bブランチがローカルに存在しないことを察知し、ローカルにbブランチを生成
-
bとorigin/bを紐付け - ローカルのbブランチに移動
このようにしてローカルのbブランチで作業することができます!
さいごに
長い記事をここまで読んでくださりありがとうございました!
今回よく使われるgit fetch git pullを少しだけ深掘りしましたが、「とりあえずpullしとこ」みたいな考えから少し抜け出せたような気がします。
