Git Fetch vs Pull
最終更新
git fetch はリモートから最新のコミットをダウンロードしますが、作業ブランチはそのままにしておきます。git pull は同じダウンロードを行い、その後すぐにそれらのコミットを現在のブランチにマージします。要するに:git pull = git fetch + git merge です。
飛び込む前に確認したいときは fetch を、統合する準備ができたら pull を使いましょう。両方をターミナルプレイグラウンドで試してみてください - ブラウザ内の本物のシェルです。
並べて比較
| Behavior | git fetch | git pull |
|---|---|---|
| リモートのコミットをダウンロードする | はい | はい |
| 現在のブランチを変更する | いいえ | はい |
| マージ競合を引き起こすことがある | いいえ | はい |
| 相当するもの | ダウンロードのみ | fetch + merge |
構文
| Command | What it does |
|---|---|
git fetch | すべてのリモートの変更をダウンロードし、マージはしない |
git fetch origin main | リモートから 1 つのブランチだけを取得する |
git pull | 現在のブランチにダウンロードしてマージする |
git pull --rebase | ダウンロードしてから、あなたのコミットを上にリベースする |
git log HEAD..origin/main | fetch の後:何をマージすることになるか確認する |
Git fetch vs pull よくある質問
git fetch と git pull の違いは何ですか?
git fetch は新しいコミットをダウンロードし、リモート追跡ブランチ(origin/main など)を更新しますが、作業ブランチは変更しません。git pull は同じ fetch を行い、その後新しいコミットを現在のブランチにマージします。つまり pull はファイルを変更し、fetch はリモートに関するあなたの認識を更新するだけです。git pull は単なる fetch と merge の組み合わせですか?
はい。
git pull は git fetch の後に、取得したブランチを現在のブランチへ git merge する処理の短縮形です。git pull --rebase を使うと、2 番目のステップは merge ではなく rebase になり、履歴が一直線に保たれます。pull ではなく fetch を使うべきなのはいつですか?
入ってくる変更を統合する前に確認したいときは
git fetch を使います - たとえば git fetch の後に git log HEAD..origin/main を実行して、何が新しいかを正確に確認します。リモートの変更をすでに信頼していて、単にブランチへマージしたいだけなら git pull を使います。git fetch が競合を引き起こすことはありますか?
いいえ。fetch はリモート追跡ブランチを更新するだけで、作業ブランチやファイルには決して触れないため、マージ競合を生み出すことはできません。競合は merge のステップでのみ発生します - これは pull が自動的に行いますが、fetch は行いません。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開けば、ブラウザ内の本物のシェルで
git fetch と git pull を実行できます - インストールは不要です。Coddy の無料インタラクティブ Git コースでも、リモートの扱い方を段階的に学べます。