gitについて理解を深めた
はじめに
rubygemにのせるコードが大体できたので、いざ作成だ!と思ってgithubにリポジトリを作成し、ローカルのリポジトリをpushしよう…としたとき、参考に見ていたサイトに気になる単語を見つけてしまった。
「pushに-uをつけることで、上流ブランチを設定します。」
…上流ブランチ?
なんだっけそれ…。よし、調べよう!
こういうことをしているから全然作成が進まないのだけど、気になるものは仕方ない。
とうわけで調べた。
上流ブランチとは
一言で言うと、「普段チェックアウトして使っているローカルの各ブランチが参照先として設定しているリモート追跡ブランチ」となる。
リモート追跡ブランチは名前の通り、リモートブランチの変更をトラッキングしているブランチで、「ローカルリポジトリの中にある」
そして、デフォルトでは、普段チェックアウトして使っているローカルの各ブランチの上流ブランチは、origin/[ブランチ名]
となっている。
例を出してまとめると、ローカルにmainブランチがあるとき、ローカルにorigin/mainという、リモートのmainブランチを追跡しているリモートブランチもまた存在し、デフォルトでは、ローカルのmainブランチの参照は、ローカルにあるorigin/mainとなっている。
(ぶっちゃけこんな説明より参考先の図を見た方が100倍わかりやすいです。)
参考:
Git で「追跡ブランチ」って言うのやめましょう \- Qiita
【Gitをしっかり理解】追跡ブランチとリモートブランチは別物! \| shin>>media
感想
push pull fetch mergeのような、他のブランチを参照するコマンドの挙動がよくわかるようになった。
git学びたてのとき、「git pullは、git fetchとgit mergeの合わせ技!」
「git fetchはリモートブランチのコミット情報をローカルブランチに持ってくる!」
「git mergeはローカルブランチにもってきた情報を反映する!」
「それらをあわせて、git pullでリモートの情報をローカルに反映するんだ!」
という情報を見たことがある
でも、自分はここに違和感を感じていた。
「じゃあgit pullだけでいいんじゃないの…?」と。
この疑問を、今回解消することができた。
つまり、git fetchはリモート追跡ブランチに情報を取得するコマンドで、git mergeは、ローカルブランチと、リモート追跡ブランチを統合するコマンドだった。
思いがけず重要な学びを得ることができた。
gitの理解を深めたことで、より開発に自信を持って取り組めるようになったと思う。