git fetch

文章目录

  • [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 fetch vs git pull 对比)
    • [5.3 查看 fetch 后的远程跟踪分支](#5.3 查看 fetch 后的远程跟踪分支)
    • [5.4 合并 fetch 后的远程跟踪分支](#5.4 合并 fetch 后的远程跟踪分支)
    • [5.5 常用别名设置](#5.5 常用别名设置)
  • [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 diffgit log 确认后再 git mergegit rebase


参考文献

Git - git-fetch Documentation

相关推荐
Java知识技术分享1 小时前
安装sourcetree
java·git·源代码管理
恋喵大鲤鱼2 小时前
git revert
git·git revert
爱和冰阔落2 小时前
【Codex项目实战】从模糊需求到可验证交付:Plan、测试、Review与Worktree完整流程
人工智能·git·codex
恋喵大鲤鱼12 小时前
git rebase
git·git rebase
大志哥12316 小时前
idea+git插件+云备份实现项目新分支新建维护
git
恋喵大鲤鱼17 小时前
git merge
git·git merge
码客日记17 小时前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
_codemonster18 小时前
Codex 核心进阶玩法(技能/MCP/派生/分叉/Git/钩子/子智能体)
git
逻极18 小时前
Git 从入门到精通:版本控制协作实战指南
git·github·分支管理·版本控制