文章目录
- [1. 简介](#1. 简介)
- [2. 格式](#2. 格式)
- [3. 选项](#3. 选项)
- [4. 示例](#4. 示例)
-
- [4.1 基础用法](#4.1 基础用法)
- [4.2 拉取远程分支到本地](#4.2 拉取远程分支到本地)
- [4.3 修剪远程跟踪分支](#4.3 修剪远程跟踪分支)
- [4.4 拉取标签](#4.4 拉取标签)
- [4.5 浅克隆相关](#4.5 浅克隆相关)
- [4.6 预览更新](#4.6 预览更新)
- [5. 注意](#5. 注意)
-
- [5.1 `git fetch` 后如何查看更新?](#5.1
git fetch后如何查看更新?) - [5.2 `git fetch` vs `git pull` 对比](#5.2
git fetchvsgit pull对比) - [5.3 查看 fetch 后的远程跟踪分支](#5.3 查看 fetch 后的远程跟踪分支)
- [5.4 合并 fetch 后的远程跟踪分支](#5.4 合并 fetch 后的远程跟踪分支)
- [5.5 常用别名设置](#5.5 常用别名设置)
- [5.1 `git fetch` 后如何查看更新?](#5.1
- [6. 小结](#6. 小结)
- 参考文献
1. 简介
git fetch 用于从远程仓库下载最新的提交、分支和标签,但不自动合并到当前分支。
核心作用:
- 将远程仓库的更新下载到本地的远程跟踪分支(如
origin/main) - 不会修改你当前的工作区或当前分支
- 让你可以先查看远程更新,再决定是
merge还是rebase
与 git pull 的区别:
git pull=git fetch+git merge(自动合并)git fetch= 只下载,不合并(更安全)
2. 格式
bash
git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository>|<group>)...]
git fetch --all [<options>]
3. 选项
bash
# ========== 修剪与清理 ==========
-p, --prune
删除本地远程跟踪分支中,远程已不存在的分支
--prune-tags
删除本地远程跟踪标签中,远程已不存在的标签(会隐式启用 --prune)
# ========== 标签处理 ==========
-t, --tags
拉取所有标签(相当于 refs/tags/*:refs/tags/*)
--no-tags
不拉取任何标签(默认行为)
# ========== 深度与历史 ==========
--depth=<depth>
浅克隆,只拉取最近的指定数量的提交历史
--unshallow
将浅克隆仓库转换为完整仓库(拉取全部历史)
--deepen=<depth>
增加浅克隆的历史深度
# ========== 其他 ==========
--all
拉取所有远程仓库的更新
--dry-run
模拟执行,显示将要获取的更新,但不实际下载
-v, --verbose
显示详细信息
--force
强制覆盖本地远程跟踪分支(即使会导致历史分叉)
4. 示例
4.1 基础用法
bash
# 拉取 origin 远程仓库的更新(默认)
git fetch
# 拉取 origin 远程仓库的 main 分支
git fetch origin main
# 拉取所有远程仓库的更新
git fetch --all
4.2 拉取远程分支到本地
bash
# 拉取 origin/main 到本地的 origin/main 跟踪分支
git fetch origin main
# 拉取 origin/feature 并直接创建本地分支
git fetch origin feature:feature
# 拉取并强制覆盖本地分支
git fetch origin +feature:feature
4.3 修剪远程跟踪分支
bash
# 删除本地 origin/* 中远程已不存在的分支
git fetch --prune
# 简写形式(-p)
git fetch -p
# 同时修剪分支和标签
git fetch --prune --prune-tags
4.4 拉取标签
bash
# 拉取所有标签
git fetch --tags
# 拉取特定标签
git fetch origin tag v1.0.0
4.5 浅克隆相关
bash
# 只拉取最近 1 次提交(用于 CI 加速)
git fetch --depth=1
# 将浅克隆转换为完整仓库
git fetch --unshallow
4.6 预览更新
bash
# 模拟执行,查看会拉取哪些更新
git fetch --dry-run
5. 注意
5.1 git fetch 后如何查看更新?
bash
# 1. 查看远程分支的最新提交
git log origin/main --oneline -5
# 2. 比较本地和远程的差异
git diff main origin/main
# 3. 查看远程新增的提交
git log main..origin/main --oneline
# 4. 查看远程跟踪分支列表
git branch -r
5.2 git fetch vs git pull 对比
| 对比维度 | git fetch |
git pull |
|---|---|---|
| 是否下载远程更新 | ✅ 是 | ✅ 是 |
| 是否自动合并 | ❌ 否 | ✅ 是 |
| 是否修改工作区 | ❌ 否 | ✅ 是 |
| 安全性 | 高(可先查看再决定) | 中(可能产生意外合并) |
| 推荐场景 | 想先查看远程更新 | 确定要合并远程更新 |
5.3 查看 fetch 后的远程跟踪分支
bash
# 查看所有远程跟踪分支
git branch -r
# 查看远程跟踪分支的最新提交
git log origin/main
# 查看远程跟踪分支与本地分支的差异
git diff main origin/main
5.4 合并 fetch 后的远程跟踪分支
git fetch 之后,可以使用 git merge 或 git rebase 将下载的内容合并到当前分支。
方法一:使用 git merge(推荐公共分支)
bash
# 1. 先 fetch 查看远程更新
git fetch origin
# 2. 合并远程分支到当前分支
git merge origin/main
方法二:使用 git rebase(推荐个人分支)
bash
# 1. 先 fetch
git fetch origin
# 2. 变基到远程分支
git rebase origin/main
5.5 常用别名设置
bash
git config --global alias.fp "fetch --prune"
git config --global alias.ft "fetch --tags"
# 使用别名
git fp
git ft
6. 小结
| 需求 | 命令 | 说明 |
|---|---|---|
| 拉取远程更新(默认) | git fetch |
拉取 origin 的所有分支更新 |
| 拉取特定分支 | git fetch origin main |
只拉取 origin/main |
| 删除远程已不存在的跟踪分支 | git fetch --prune |
清理本地残留 |
| 拉取所有标签 | git fetch --tags |
拉取远程所有标签 |
| 浅克隆加速 | git fetch --depth=1 |
只拉取最近 1 次提交 |
| 预览将要拉取的更新 | git fetch --dry-run |
模拟执行,不实际下载 |
| 拉取远程分支并创建本地分支 | git fetch origin feature:feature |
直接创建本地分支 |
一句话总结 :git fetch 是安全拉取远程更新的命令 ,它只下载不合并,让你可以先查看更新再决定如何操作。推荐在日常工作流中先 git fetch 查看远程变化,再用 git diff 或 git log 确认后再 git merge 或 git rebase。