30歳未経験からエンジニアに転職ブログ

30歳未経験からウェブエンジニアへの転職を目指して個人アプリ作成中です。

git pull origin masterは何をやっているのか?

この記事を書くことにした背景

AWSへのデプロイを進める過程で、本番環境でのマイグレーションした時に生じた以下のエラー解決でつまずいた。
その時自分が全然わかってなかった壁が2つあって、

1つは

rails db:migrate:reset

そしてもう1つが今回の

git pull origin master

本番環境でこのgit pull origin masterをやってなかったために、GitHubのマスターブランチのマイグレーションファイルの時系列が本番環境に反映されなかったのがエラーの原因だった。

結果的に解決できたのでそれはよかったのだが、git pull origin masterを全然理解してないことに気づいた。
それはまずいと思ったのでこの記事を書くことにした。

git pull master originの意味

git pull origin masterとは?? 何気なく使うものを解説してみたこちらの記事によると、 pullとはfetchとmergeを同時に行うこと だそう。

「え、ちょっと待って。そもそもfetchって何だっけ?mergeはあれでしょ。作業ブランチをマスターブランチに統合することでしょ。fetchがまだわかってないんですけど・・・」

git fetchとは?何をやってる?

チームで開発していると、GitHubがどんどん更新されていく。中身が変わっていく。
それを自分のPCに反映させるのがfetch。

「なるほど、そうだったのか。納得した。テックキャンプのチーム開発の時、たとえば他のメンバーがいいね機能を実装して、いくつかコントローラーとかビューとか新しくできたりして変わった部分は、何もしなければ当然自分のPCには反映されてない。それを反映できるのがfetchなんだ」

いや、ちょっと待てよ... さっきの記事の続きを読んでみると、ただfecthをしただけでは、ローカルのソースコードは変わらないらしい。。。

「ん?fetchでリモートのソースコードがローカルに反映されるんじゃないの?なんかテンパってきた」
fetchっていうのは、リモートの情報をダウンロードしただけ、らしい。
なるほど、ダウンロードしただけで、ダウンロードしたもので上書きするっていうのはやってないってことか。

「なるほど、わかってきた。fetchはリモートつまりGitHubソースコードをダウンロードするコマンドで、mergeが別のブランチを自分のブランチに同期させること。その2つの工程を一気にやってくれるのがpull。なるほどな」

あとちょっとモヤッとしてるのが、何でmerge=上書き、同期なのかということ。
mergeってあるブランチを他のブランチに統合、同期させる、ガッチャンコさせることだよな。

ローカルでのmergeはGitHub Desktopで毎日やってるからわかるけど、リモートでのmergeっていうのがちょっとわからない。 プルリクのmergeとはまた違うよな?

ここのモヤモヤはいずれ解消したいところ。

originって何?

例の記事には「リモートのアクセス先」と書いてある。

「え?リモートのアクセス先?何のこと?」 GitHubには自分が今まで作ってきたアプリケーションがいくつか入ってるはず。
自分の場合、テックキャンプの時に作ったchatspace、チーム開発で作ったメルカリクローンアプリ、そして転職活動用の個人アプリだ。

そのどれかを指定するのがoriginらしい。 originが何を指定し てるか確認するコマンドがあって、それが以下のコマンドだ。

$ git remote -v
origin  github:naota7118/pfc-master.git (fetch)
origin  github:naota7118/pfc-master.git (push)

「いつの間にこんな設定したの?」という感じだが、リポジトリ登録時に設定していたらしい。

改めてgit pull origin masterは何をやっているのか?

GitHubソースコードを自分のローカルに反映させること。
チーム開発だったら、各メンバーがいろいろ作業した結果、GitHubソースコードがどんどん編集されて変わっていくから、それを自分のPCに反映させる時にgit pull origin masterを使う。

「ちょっと待てよ。ほぼわかったんだけど、もう1つだけ。これを開発環境じゃなくて本番環境でやるのは何でだっけ?git pull origin masterって開発環境でやっちゃダメなの?」

今日はもう遅いのでここまで。
後日追記します。

読んでくれた方ありがとうございました。
Twitterやってますので、よろしければフォローお願いします。

twitter.com