10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

watnow Advent Calendar 2024

Day 4

origin/mainを意識してgit fetch, git pullの違いを理解する

Posted at

はじめに

こんにちは、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 fetchgit pull

ここまでやってしまえばgit fetchgit pullの説明は簡単です。
2つともローカルに情報をもってくるコマンドだということは皆さん知っていると思いますが、この2つのコマンドの違いはなんでしょうか?

答えは「ローカルのどこまで情報を持ってきているのか」です。
図を見ればわかる通りgit fetchはリモート追跡ブランチに情報をもってきているのに対してgit pullはローカルブランチまで情報をもってきます。

チーム開発でよくあるケースを考える

他のメンバーのPRを手元で確認したいとき

  1. 確認したいブランチがローカルにないとき
    7D8247F7-1DB2-49BD-A18E-9FF8E7373FC2.jpg

    git fetchコマンドをつかう

    git fetch origin 
    git checkout origin/b
    

    git fetch origin でリモートの情報をリモート追跡ブランチにもってきます
    その後git checkout origin/bを実行することでリモート追跡ブランチにもってきた最新の情報をみることができます

  2. 確認したいブランチがローカルにあるとき
    85B2243D-B8EA-4D33-A823-286E68BAD598.jpg
    git pullコマンドをつかう

    git checkout b
    git pull origin b
    

リモートにあるブランチで作業したいとき

git fetch origin
git checkout b

(補足)
checkoutを普段使っている人が、ここまでの解説を読むとこのコマンドでリモートにあるブランチをローカルにもってきて作業できることに違和感があるかもしれません。これまでの解説通りであればbブランチはまだローカルに存在していないためcheckoutできないのではないかという疑問がうまれます。fetchを実行した段階では新しいブランチの情報はリモート追跡ブランチまでしか反映されていません。
ただしcheckoutを実行した段階でgit が以下の操作を行ってくれます。

  1. bブランチがローカルに存在しないことを察知し、ローカルにbブランチを生成
  2. borigin/bを紐付け
  3. ローカルのbブランチに移動
    このようにしてローカルのbブランチで作業することができます!

さいごに

長い記事をここまで読んでくださりありがとうございました!
今回よく使われるgit fetch git pullを少しだけ深掘りしましたが、「とりあえずpullしとこ」みたいな考えから少し抜け出せたような気がします。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?