2026-01-07
git
00

目录

最通俗的比喻
📊 核心区别对比
🔍 工作原理图解
💻 实际命令对比
git fetch 的工作流程
git pull 的工作流程
🎯 使用场景建议
什么时候用 git fetch?
什么时候用 git pull?
⚠️ 潜在问题
git pull 的风险
git fetch 的安全流程
🛠️ 实用技巧
查看 fetch 后的状态
配置 pull 行为
选择性地合并
📈 最佳实践
团队协作推荐流程
个人项目快捷方式
🆘 常见问题解决
pull 后出现冲突
撤回错误的 pull
📋 快速决策指南
💎 一句话总结
🎓 给初学者的建议

最通俗的比喻

想象你在图书馆看书:

  • git fetch(提取) = 走到书架前,查看有哪些新书到了,但不借回家
  • git pull(拉取) = 走到书架前,查看新书,然后直接借回家并摆到你的书桌上

📊 核心区别对比

方面git fetchgit pull
动作只获取远程信息获取 + 合并
是否修改本地❌ 不修改任何本地文件✅ 修改本地文件
风险零风险可能产生冲突
实际效果更新远程跟踪分支更新远程跟踪分支 + 合并到当前分支
比喻查看邮件列表查看邮件并自动回复

🔍 工作原理图解

原始状态: 本地仓库:A - B 远程仓库:A - B - C - D 执行 git fetch 后: 本地仓库:A - B 远程跟踪分支:C - D(只是知道有更新,不应用) 执行 git pull 后: 本地仓库:A - B - C - D(自动合并到当前分支)

💻 实际命令对比

git fetch 的工作流程

bash
# 1. 只获取更新信息 git fetch origin # 2. 查看远程有什么更新 git log origin/main # 3. 自己决定是否合并 git merge origin/main # 或 git rebase origin/main

git pull 的工作流程

bash
# 一行命令完成两件事 git pull origin main # 等价于: # 1. git fetch origin main # 2. git merge origin/main

🎯 使用场景建议

什么时候用 git fetch

  1. 查看队友进度:想看看别人做了什么,但不打算立即合并
  2. 代码审查前:先获取最新代码,检查后再决定合并
  3. 安全第一:不确定远程更新是否稳定
  4. 选择性合并:只想合并部分更新
bash
# 典型工作流 git fetch origin git log origin/main --oneline # 看到有"修复了bug",决定合并 git merge origin/main

什么时候用 git pull

  1. 确定要更新:明确需要最新的远程代码
  2. 个人项目:不会产生冲突的小项目
  3. 紧急同步:需要立即获得最新代码
  4. 简单项目:分支策略简单,冲突可能性低
bash
# 简单项目日常更新 git pull origin main

⚠️ 潜在问题

git pull 的风险

bash
# 假设你和同事都改了同一个文件 # 你先执行: git add . git commit -m "我的修改" # 同事推送了他的修改 # 你执行: git pull origin main # ❌ 可能产生合并冲突!需要手动解决

git fetch 的安全流程

bash
# 1. 先获取远程状态 git fetch origin # 2. 查看差异 git diff origin/main # 3. 安全合并 git merge origin/main # 如果冲突,有准备地解决

🛠️ 实用技巧

查看 fetch 后的状态

bash
# 查看本地和远程的差异 git log --oneline --graph --all # 查看哪些分支有更新 git branch -v # 查看特定远程分支 git log origin/main

配置 pull 行为

bash
# 设置 pull 时使用 rebase(更整洁的提交历史) git config --global pull.rebase true # 设置 pull 时使用 merge(默认行为) git config --global pull.rebase false

选择性地合并

bash
# 1. 先 fetch git fetch origin # 2. 查看远程分支的更新 git log origin/feature-branch # 3. 只合并特定分支 git merge origin/feature-branch

📈 最佳实践

团队协作推荐流程

bash
# 1. 先保存本地修改 git add . git commit -m "暂存我的工作" # 2. 安全地获取远程更新 git fetch origin # 3. 查看远程有什么更新 git log origin/main --oneline # 4. 使用 rebase 合并(保持提交历史线性) git rebase origin/main # 或使用 merge # git merge origin/main # 5. 解决可能的冲突 # 6. 推送 git push origin main

个人项目快捷方式

bash
# 直接 pull 并自动 rebase git pull --rebase # 或配置默认使用 rebase git config --global pull.rebase true git pull

🆘 常见问题解决

pull 后出现冲突

bash
# 1. 查看哪些文件冲突 git status # 2. 手动解决冲突 # 编辑文件,移除 <<<<<<<, =======, >>>>>>> 标记 # 3. 标记冲突已解决 git add 文件名 # 4. 完成合并 git commit

撤回错误的 pull

bash
# 如果合并后发现问题 git reset --hard HEAD~1 # 回到 pull 之前的状态

📋 快速决策指南

我应该用哪个? ┌─────────────────────┐ │ 需要立即应用更新? │ └──────────┬──────────┘ │ ┌───────▼───────┐ │ 是 │ 否 └───────┬───────┘ │ ┌─────▼─────┐ │ git pull │ git fetch └───────────┘

💎 一句话总结

git fetch = 先看看,再决定要不要拿 git pull = 直接拿过来用

🎓 给初学者的建议

  1. 刚开始用 git pull:简单直接
  2. 团队协作时尝试 git fetch:更安全可控
  3. 记住:pull = fetch + merge
  4. 冲突不可怕,有冲突就解决,这是协作的常态

本文作者:张京

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!