想象你在图书馆看书:
git fetch(提取) = 走到书架前,查看有哪些新书到了,但不借回家git pull(拉取) = 走到书架前,查看新书,然后直接借回家并摆到你的书桌上| 方面 | git fetch | git pull |
|---|---|---|
| 动作 | 只获取远程信息 | 获取 + 合并 |
| 是否修改本地 | ❌ 不修改任何本地文件 | ✅ 修改本地文件 |
| 风险 | 零风险 | 可能产生冲突 |
| 实际效果 | 更新远程跟踪分支 | 更新远程跟踪分支 + 合并到当前分支 |
| 比喻 | 查看邮件列表 | 查看邮件并自动回复 |
原始状态: 本地仓库:A - B 远程仓库:A - B - C - D 执行 git fetch 后: 本地仓库:A - B 远程跟踪分支:C - D(只是知道有更新,不应用) 执行 git pull 后: 本地仓库:A - B - C - D(自动合并到当前分支)
bash# 1. 只获取更新信息
git fetch origin
# 2. 查看远程有什么更新
git log origin/main
# 3. 自己决定是否合并
git merge origin/main
# 或
git rebase origin/main
bash# 一行命令完成两件事
git pull origin main
# 等价于:
# 1. git fetch origin main
# 2. git merge origin/main
git fetch?bash# 典型工作流
git fetch origin
git log origin/main --oneline
# 看到有"修复了bug",决定合并
git merge origin/main
git pull?bash# 简单项目日常更新
git pull origin main
bash# 假设你和同事都改了同一个文件
# 你先执行:
git add .
git commit -m "我的修改"
# 同事推送了他的修改
# 你执行:
git pull origin main
# ❌ 可能产生合并冲突!需要手动解决
bash# 1. 先获取远程状态
git fetch origin
# 2. 查看差异
git diff origin/main
# 3. 安全合并
git merge origin/main
# 如果冲突,有准备地解决
bash# 查看本地和远程的差异
git log --oneline --graph --all
# 查看哪些分支有更新
git branch -v
# 查看特定远程分支
git log origin/main
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
bash# 1. 查看哪些文件冲突
git status
# 2. 手动解决冲突
# 编辑文件,移除 <<<<<<<, =======, >>>>>>> 标记
# 3. 标记冲突已解决
git add 文件名
# 4. 完成合并
git commit
bash# 如果合并后发现问题
git reset --hard HEAD~1
# 回到 pull 之前的状态
我应该用哪个? ┌─────────────────────┐ │ 需要立即应用更新? │ └──────────┬──────────┘ │ ┌───────▼───────┐ │ 是 │ 否 └───────┬───────┘ │ ┌─────▼─────┐ │ git pull │ git fetch └───────────┘
git fetch = 先看看,再决定要不要拿
git pull = 直接拿过来用
git pull:简单直接git fetch:更安全可控pull = fetch + merge本文作者:张京
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!