好的,阿杰,我们来详细梳理一下 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 fetch | git pull |
---|---|---|
获取远程更新 | ✅ | ✅ |
自动合并更新 | ❌ | ✅ |
安全性 | 高 | 中(可能引发冲突) |
使用场景 | 想查看更新或手动合并 | 想直接同步最新代码 |
3️⃣ 实际示例
假设你在本地 main
分支,远程仓库 origin/main
有新提交:
- 只 fetch:
git fetch origin
git log HEAD..origin/main --oneline
# 查看远程新增提交
此时你本地 main
并未变化。
- pull 合并:
git pull origin main
- 如果远程有新提交,本地会自动合并。
- 如果有冲突,需要手动解决,然后
git add
+git commit
。
- 安全拉取 + 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
发表回复