git fetch 命令
简介
git fetch 是 Git 中用于从远程仓库获取最新更改的命令。与 git pull 不同,git fetch 只获取更改,不会自动合并到当前分支。
基本概念
Fetch vs Pull
| 特性 |
Fetch |
Pull |
| 操作 |
只获取,不合并 |
获取并合并 |
| 工作区 |
不改变工作区 |
自动合并到工作区 |
| 安全性 |
更安全,可以先检查 |
可能直接产生冲突 |
| 使用场景 |
需要检查后再合并 |
快速同步 |
Fetch 的作用
- 从远程获取最新提交
- 更新远程分支引用
- 不改变当前工作区
- 可以安全地查看远程更改
命令语法
1 2 3 4 5 6 7 8
| git fetch [远程仓库]
git fetch origin
git fetch origin main
|
查看帮助文档
常用选项
| 选项 |
说明 |
--all |
获取所有远程仓库的更新 |
-p, --prune |
删除已不存在的远程分支引用 |
--tags |
获取所有标签 |
--dry-run |
预览模式,不实际获取 |
-v, --verbose |
详细输出 |
-q, --quiet |
静默模式 |
--unshallow |
将浅仓库转换为完整仓库 |
--depth=<n> |
浅获取,只获取最近 n 次提交 |
基本使用
1. 基本获取
1 2 3 4 5 6 7 8
| $ git fetch
$ git fetch origin
$ git fetch origin main
|
2. 获取所有远程
3. 清理已删除的远程分支
1 2 3 4 5
| $ git fetch -p
$ git fetch --prune
|
4. 获取标签
1 2 3 4 5
| $ git fetch --tags origin
$ git fetch origin --tags
|
5. 浅获取
1 2
| $ git fetch --depth=10 origin
|
实际应用场景
场景1:检查远程更新
1 2 3 4 5 6 7 8
| $ git fetch origin
$ git log HEAD..origin/main
$ git merge origin/main
|
场景2:同步所有远程
场景3:清理远程分支引用
场景4:查看远程分支
1 2 3 4 5 6 7 8
| $ git fetch origin
$ git branch -r
$ git branch -rv
|
场景5:比较本地和远程
1 2 3 4 5 6 7 8
| $ git fetch origin
$ git diff main origin/main
$ git log origin/main --oneline
|
常见问题和解决方案
问题1:看不到远程分支
解决方案:
1 2 3 4 5
| $ git fetch origin
$ git branch -r
|
问题2:远程分支已删除但本地仍显示
解决方案:
1 2 3 4 5
| $ git fetch -p origin
$ git remote prune origin
|
问题3:获取速度慢
解决方案:
1 2 3 4 5
| $ git fetch --depth=10 origin
$ git fetch origin main
|
最佳实践
1. 定期 Fetch
1 2 3 4 5
| $ git fetch origin
$ git log HEAD..origin/main
|
2. 使用 Prune 清理
3. Fetch 后检查再合并
1 2 3 4 5 6 7
| $ git fetch origin $ git log HEAD..origin/main $ git merge origin/main
$ git pull origin main
|
总结
git fetch 是安全获取远程更新的方式:
- 基本用法:
git fetch origin 获取远程更新
- 清理引用:
git fetch -p 清理已删除的远程分支
- 查看更新:fetch 后可以安全地查看远程更改
- 安全合并:检查后再决定是否合并
关键要点:
- ✅ 使用 fetch 安全地获取更新
- ✅ fetch 后检查再合并
- ✅ 使用
-p 清理已删除的远程分支
- ✅ 定期 fetch 保持同步