git fetch 是 Git 中一个安全、只读的命令,用于从远程仓库下载最新的提交、分支、标签等数据到本地,但不会自动合并或修改你当前的工作目录。


🧠 核心作用一句话:

“把远程仓库的新内容拉到本地,但不改动你的代码。”


🔍 详细解释

假设你和同事都在开发同一个项目,远程仓库(如 GitHub)上已经有新提交了。

  • 执行 git fetch 后:
    • Git 会连接远程仓库(如 origin);
    • 下载所有新的提交、分支、标签;
    • 更新本地的远程跟踪分支(如 origin/main、origin/feature-x);
    • 但不会动你当前的分支(如 main)和工作区文件。

📂 举个例子

# 查看当前本地分支
$ git branch
* main

# 查看远程跟踪分支(fetch 前)
$ git branch -r
  origin/main   # 假设是 commit A

# 远程仓库有人推送了新代码(commit B)

# 执行 fetch
$ git fetch origin

# 再看远程跟踪分支
$ git branch -r
  origin/main   # 现在指向 commit B ✅

# 但你的本地 main 分支仍停留在 commit A
$ git log --oneline -2
A ... (HEAD -> main)

此时你可以:

  • 用 git diff main..origin/main 查看差异;
  • 用 git merge origin/main 或 git rebase origin/main 手动合并更新;
  • 或者直接切换到新分支:git checkout -b feature origin/feature。

✅ git fetch vs git pull

命令行为是否安全
git fetch仅下载远程数据,不修改工作区✅ 安全,可随时执行
git pull= git fetch + git merge(自动合并)⚠️ 可能产生冲突,需谨慎

💡 建议:优先使用 git fetch + 手动合并,更可控、更安全!


🛠 常用用法

# 获取所有远程分支的更新
git fetch

# 获取指定远程仓库的更新(如 origin)
git fetch origin

# 获取并清理已删除的远程分支(本地不再保留)
git fetch --prune

# 获取所有远程仓库(包括多个 remote)
git fetch --all

🎯 适用场景

  • 想看看团队其他人有没有新提交;
  • 准备合并前先检查变更内容;
  • 在 CI/CD 脚本中安全地同步远程状态;
  • 避免 git pull 自动合并带来的意外冲突。

✅ 总结

git fetch = “悄悄看一眼远程有什么新东西,但不动我的代码。”
它是 Git 工作流中最安全、最推荐的同步方式之一。

更多推荐