Appearance
推送与拉取
概述
推送(Push)和拉取(Pull)是 Git 远程协作中最常用的操作,它们实现了本地仓库与远程仓库之间的代码同步。理解这些操作的工作原理对于团队协作至关重要。
git push 推送
基本语法
bash
git push <remote> <branch>推送到远程仓库
推送当前分支到 origin:
bash
git push origin main首次推送并设置上游分支
bash
git push -u origin main或使用完整语法:
bash
git push --set-upstream origin main设置上游后,后续可直接使用:
bash
git push推送所有分支
bash
git push --all origin强制推送
警告
强制推送会覆盖远程历史,谨慎使用!
bash
git push --force origin main更安全的强制推送(推荐):
bash
git push --force-with-lease origin main推送标签
推送单个标签:
bash
git push origin v1.0.0推送所有标签:
bash
git push --tags origin删除远程分支
bash
git push origin --delete feature-branchgit pull 拉取
基本语法
bash
git pull <remote> <branch>拉取远程更新
bash
git pull origin main如果已设置上游分支:
bash
git pullgit pull 的工作原理
git pull 实际上是两个命令的组合:
bash
git fetch origin
git merge origin/main使用变基模式拉取
bash
git pull --rebase origin main这等同于:
bash
git fetch origin
git rebase origin/main拉取时指定合并策略
bash
git pull -s recursive -X theirs origin maingit fetch 获取
基本语法
bash
git fetch <remote>获取所有远程更新
bash
git fetch origin获取所有远程仓库的更新
bash
git fetch --all获取特定分支
bash
git fetch origin mainfetch 的工作原理
git fetch 只下载远程数据,不会自动合并:
bash
git fetch origin查看获取的更新:
bash
git log HEAD..origin/main合并获取的更新:
bash
git merge origin/main清理远程已删除的分支引用
bash
git fetch --prune origin或简写:
bash
git fetch -p originpush/pull/fetch 区别
操作对比
| 命令 | 方向 | 是否自动合并 | 使用场景 |
|---|---|---|---|
| git push | 本地 → 远程 | 否 | 推送本地提交 |
| git pull | 远程 → 本地 | 是 | 快速同步更新 |
| git fetch | 远程 → 本地 | 否 | 安全检查更新 |
工作流程对比
git pull 流程:
远程仓库 → 下载更新 → 自动合并 → 本地仓库git fetch + merge 流程:
远程仓库 → 下载更新 → 检查变更 → 手动合并 → 本地仓库何时使用哪个命令
使用 git push:
- 完成本地开发后推送代码
- 分享你的提交给团队
使用 git pull:
- 快速同步远程更新
- 确定不会有冲突时
使用 git fetch:
- 想先查看远程变更再决定是否合并
- 需要精确控制合并过程
- 多人协作时更安全的做法
推荐工作流程
安全的同步流程:
bash
git fetch origin
git status
git log HEAD..origin/main
git merge origin/main或使用变基:
bash
git fetch origin
git rebase origin/main实战示例
场景一:首次推送新仓库
bash
git init
git add .
git commit -m "Initial commit"
git remote add origin git@github.com:user/repo.git
git push -u origin main场景二:团队协作日常同步
bash
git fetch origin
git status
git pull --rebase origin main
git push origin main场景三:解决推送冲突
当推送被拒绝时:
bash
git push origin main输出:
! [rejected] main -> main (non-fast-forward)解决方法:
bash
git fetch origin
git rebase origin/main
git push origin main场景四:多人协作同一分支
bash
git fetch origin
git rebase origin/feature-branch
git push origin feature-branch最佳实践
推送前先拉取
bash
git pull --rebase
git push使用 --force-with-lease 替代 --force
bash
git push --force-with-lease origin main定期清理远程引用
bash
git fetch --prune使用变基保持历史整洁
bash
git pull --rebase origin main常见问题
推送被拒绝(non-fast-forward)
原因:远程有新的提交。
解决:
bash
git fetch origin
git rebase origin/main
git push origin main拉取时产生不必要的合并提交
使用变基模式:
bash
git pull --rebase origin main配置默认使用变基:
bash
git config pull.rebase true如何撤销已推送的提交
bash
git revert HEAD
git push origin main总结
git push将本地提交推送到远程仓库git pull拉取并自动合并远程更新git fetch只下载远程数据,更安全可控- 推荐先 fetch 再 merge/rebase,最后 push
- 使用
--force-with-lease替代--force
