好的,阿杰,我们来详细梳理一下 git fetch 和 git pull 的概念、区别和使用方法,并结合实际场景讲解。这个内容对你理解 Git 的工作流非常关键。


1️⃣ 基本概念

git fetch

  • 作用:从远程仓库获取最新的更新(commit、branch、tag 等),但 不合并到当前分支
  • 特点
    • 只更新远程分支(例如 origin/main),不会触碰本地分支(例如 main)。
    • 安全,不会改变你当前的工作状态。
  • 常用场景
    • 想先看远程更新,再决定是否合并。
    • 想保持本地分支不受远程变化干扰。
# 获取远程所有更新
git fetch origin

# 查看远程分支的更新
git log HEAD..origin/main --oneline


git pull

  • 作用:从远程仓库获取最新更新并 自动合并 到当前分支。
  • 本质git pull = git fetch + git merge(默认合并方式)
  • 常用场景
    • 想直接同步远程仓库最新代码到本地。
    • 适合与团队协作时快速更新代码。
# 拉取远程 main 并合并到当前分支
git pull origin main

⚠️ 注意:

  • 如果本地有改动且与远程冲突,git pull 可能会出现合并冲突。
  • 可以使用 --rebase 方式避免多余的 merge commit:
git pull --rebase origin main


2️⃣ 对比总结

特性git fetchgit pull
获取远程更新
自动合并更新
安全性中(可能引发冲突)
使用场景想查看更新或手动合并想直接同步最新代码

3️⃣ 实际示例

假设你在本地 main 分支,远程仓库 origin/main 有新提交:

  1. 只 fetch
git fetch origin
git log HEAD..origin/main --oneline
# 查看远程新增提交

此时你本地 main 并未变化。

  1. pull 合并
git pull origin main

  • 如果远程有新提交,本地会自动合并。
  • 如果有冲突,需要手动解决,然后 git add + git commit
  1. 安全拉取 + rebase
git pull --rebase origin main

  • 将本地提交临时放到远程更新之后,保持提交记录整洁。

4️⃣ 小技巧

  • 只想更新远程分支信息
git fetch --all

  • 删除远程已经删除的分支本地引用
git fetch -p

  • 查看本地与远程差异
git diff main origin/main


总结:

  • git fetch → 获取远程最新信息,但不改变本地分支
  • git pull → 获取 + 自动合并到当前分支
  • 推荐团队协作:先 fetch 看更新,再决定 merge 或 rebase