Gitのfetchとpullの違い、毎回ごっちゃになる問題
Git触り始めた頃、
git fetch
git pullこの2つの違いが本当に分からなかったです。
どっちも
「最新を取ってくるやつ」
に見える。
でも実際は、
“手元のファイルを書き換えるかどうか”
がかなり大きな違いです。
ここ整理すると、
Gitの解像度かなり上がります。
fetch と pull の違い
まず結論。
git pullは内部的に、
git fetch
git mergeをまとめて実行しています。
つまり、
pull = fetch + mergeです。
git fetchとは?
git fetchは、
「リモートの最新情報を取得するだけ」
のコマンドです。
重要なのは、
自分の作業ファイルは書き換わらない
ということ。
かなり安全。
イメージとしては、
郵便受けに届いた手紙を回収するだけ
です。
まだ部屋では開かない。
なので、
「他の人が何を変更したか確認したい」
みたいな時に使いやすい。
git pullとは?
一方、
git pullは、
最新情報を取得したあと、
今の自分の作業に合体させます。
つまり、
手元のファイルが更新される。
イメージとしては、
手紙を開いて、自分のノートに直接書き込む
感じ。
便利なんですが、
不用意に使うと事故ります。
なぜプルリク確認で fetch を使うのか
これ、
実務だとかなり重要。
例えば他人のプルリクを確認したい時。
いきなり pull すると、
自分の作業ブランチに
他人の変更が混ざる可能性があります。
なので普通は、
git fetchで安全に情報だけ取得して、
そのあと
git checkoutや
git switchで対象ブランチへ移動して確認します。
特に、
画像
Excel
PDF
みたいなバイナリファイル確認時は、
VSCodeへフェッチして
ローカルで目視確認することが多いです。
Gitコマンド整理
Gitはコマンドが多いので、
「何を目的に使うか」
で整理すると分かりやすいです。
自分の変更を保存する系
git add
git add .変更したファイルを、
「保存候補」
としてステージングする。
まだ保存確定ではない。
git commit
git commit -m "ログイン修正"変更内容を履歴として保存。
ここで初めて
Gitに記録される。
GitHubと同期する系
git push
git push自分のコミットを
GitHubへアップロード。
チーム共有。
git fetch
git fetch最新情報だけ取得。
手元ファイルは安全。
git pull
git pull最新取得+自動合体。
便利だけど影響範囲大きい。
ブランチ操作系
git branch
git branchブランチ一覧確認。
今どこにいるか確認できる。
git checkout
git checkout feature/login別ブランチへ移動。
昔からある。
git switch
git switch feature/login最近はこちらも多い。
「移動専用」で分かりやすい。
状況確認系
git status
git statusGit初心者の命綱。
迷ったらこれ。
今の状態全部見れる。
git log
git log変更履歴確認。
誰がいつ何したか見れる。
Gitは「履歴管理システム」と考えると分かりやすい
最初は、
fetch
pull
checkout
merge
rebaseみたいな単語だらけで混乱します。
でも実際は、
情報を取ってくる
保存する
合体する
作業場所を切り替える
をやってるだけ。
ここが整理できると、
「今Gitが何をしているのか」
が見えるようになってきます。
