GitHubなどのリモートリポジトリを使うと、fetch、pull、push が出てきます。どれもリモートと関係しますが、向きと影響が違います。
一言でいうと
fetchはリモート情報を見る、pullはリモート変更を取り込む、pushは手元のcommitを送る操作です。
比較表
| コマンド | 向き | 手元の作業ブランチへの影響 |
|---|---|---|
git fetch | リモート → 手元のリモート追跡情報 | 直接は変えない |
git pull | リモート → 手元のブランチ | 取り込んで変える |
git push | 手元 → リモート | リモートを更新する |
git fetch
fetch は、リモート側の最新情報を取得します。
git fetch
手元の作業ブランチは直接変わりません。安全にリモート状況を確認したいときに使います。
git log --oneline main..origin/main
このように、リモート側にある新しいcommitを確認できます。
git pull
pull は、リモートの変更を手元のブランチへ取り込みます。
git pull
多くの場合、fetch と merge、または設定によって fetch と rebase の組み合わせとして動きます。
安全に確認したいときは、いきなりpullせずfetchで状況を見るのが有効です。
git push
push は、手元のcommitをリモートへ送ります。
git push
初回pushでは、上流ブランチを設定することがあります。
git push -u origin feature/example
よくある場面
| 状況 | 使うコマンド |
|---|---|
| リモートに変更があるか見たい | git fetch |
| リモート変更を取り込みたい | git pull |
| 自分のcommitをGitHubへ送りたい | git push |
| pushが拒否された | まず git fetch で状況確認 |
よくある誤解
| 誤解 | 実際 |
|---|---|
| fetchとpullは同じ | pullは手元ブランチも変えます |
| commitしたらGitHubに上がる | pushするまで上がりません |
| pullは常に安全 | コンフリクトや意図しないmergeが起きます |
| pushは自分だけに影響する | リモートを見ている人にも影響します |
まとめ
git fetch はリモート情報を取得するだけ、git pull はリモート変更を手元に取り込む、git push は手元のcommitをリモートへ送る操作です。慣れないうちは、pull の前に fetch で状況を確認すると安全です。