はじめに
こんにちは。新卒未経験でエンジニアとして配属されて2か月が経ちました。
この記事では、gitに触れて間もない私が研修中にやらかしたgit pullについての小さな失敗を紹介します。
同じような勘違いをしている方の参考になれば幸いです。
また、この記事は初心者エンジニアの中でも、私のように「git pull すれば最新になる」と思っているgitの第一歩で躓いてしまった方向けの記事になっていますので、fetch merge rebase switchなどには触れずに進んでいきます。ご了承ください。
私のgitレベル
配属されるまでプログラミング言語に触ったことがありませんでした。
当然gitも初耳で、最初は「プログラミング言語と何が違うんだ?」と思っていたくらいです。
先輩や同期に教わりながら、なんとなく分かった気になっていました。「なんとなく」が落とし穴でした。
何が起きたのか
研修で、新卒全員の自己紹介をまとめたウェブページを作ることになりました。
自分の自己紹介ページが完成し、mainブランチにマージ。
私のページには「他己紹介欄」(会社の人が私について書くコーナー)を用意していました。
同期から「他己紹介欄に内容を追加したからマージして」とプルリクが来たのでマージ。
「ローカル(作業ブランチ)で確認しよう!」と思い、ターミナルに入力しました。
git pull
……ローカルのファイルを見ても、何も変わっていませんでした。
......何で?
原因
git pull を実行した時、私は 作業ブランチ(自分のフィーチャーブランチ)にいました。
私の勘違い:
git pull= リモートのmainの状態をローカルに反映させるもの
実際の挙動:
git pull= 今いるローカルブランチと同名のリモートブランチの状態をローカルに反映させるもの
(※厳密には「現在のブランチに設定された upstream ブランチを取得して取り込む」)
正しい対処法
方法① git pull origin main で明示的に指定する
git pull origin main
方法② mainブランチに切り替えてから git pull する⇒新しくブランチを切る
git checkout main
git pull
ローカルのmainブランチにリモートのmainブランチの状態を反映させたのち、必要であれば新しくブランチを切り直す、というのが正しい流れでした。
まとめ
| 操作 | 何が起きるか |
|---|---|
git pull |
今いるブランチと同名のリモートブランチを取得(※正確には「現在のブランチに設定された upstream ブランチを取得して取り込む」) |
git pull origin main |
リモートのmainブランチを今いるブランチに取り込む |
「とりあえず『git pull』すれば最新の状態にもってこれる!」という認識では足りないということでした。
これからもgit沼にはまりながら成長していきます。
補足
実務で作業ブランチにmainの変更を取り込みたい場合は git fetch origin → git merge origin/main が確実で適切ですが、これはまた別の記事で……