リモートの最新を確認する- git fetch
リモートから最新のデータを取得(フェッチ)します(マージはしない)。
概念図
構文
bash
git fetch [<remote>]使用例
すべてのリモートから取得
bash
git fetchoriginから取得
bash
git fetch originリモートで削除されたブランチの追跡参照を削除
bash
git fetch --prunepull との違い
git pull は実質的に git fetch + git merge(または git rebase)を一度に実行するコマンドです。
違いを整理すると以下のようになります。
| 操作 | git fetch | git pull |
|---|---|---|
| リモートからデータ取得 | する | する |
| ローカルブランチにマージ | しない | する |
| 安全性 | 高い(作業に影響なし) | マージコンフリクトが発生する可能性 |
| 使い分け | 確認してからマージしたい時 | すぐに最新化したい時 |
「まず状況を見たい」ときは fetch、「すぐに取り込みたい」ときは pull と覚えると選びやすいです。
ハマりポイント:main と origin/main は別物
初心者が最もハマりやすいのが、ローカルブランチの main とリモート追跡ブランチの origin/main は別のポインタであるという点です。
| 名前 | 実体 | いつ動くか |
|---|---|---|
main |
ローカルの作業ブランチ | ローカルで commit / merge / pull したとき |
origin/main |
リモートの状態をキャッシュした読み取り専用の参照 | git fetch(または git pull)したとき |
git fetch が更新するのは origin/main だけで、ローカルの main は一切動きません。
そのため fetch 後に git log しても「変わってないじゃん…」となりがちです。
実際には origin/main には新しいコミットが入っているので、git log origin/main や git log main..origin/main で確認できます。
「fetch したのに反映されない」と感じたときは、ローカルブランチにマージするステップを忘れていないかを確認してください。
bash
# リモートの最新情報を取得(ローカルの main は動かない)
git fetch origin
# origin/main にだけあるコミット = 未取り込みの変更
git log main..origin/main --oneline
# ローカルの main に実際に取り込む
git merge origin/main
# もしくは
git rebase origin/main