五、远程仓库:团队协作的核心
5.1 远程仓库操作
# 查看远程仓库
git remote -v
# origin https://github.com/user/repo.git (fetch)
# origin https://github.com/user/repo.git (push)
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 修改远程仓库地址
git remote set-url origin https://github.com/user/new-repo.git
# 删除远程仓库
git remote remove origin
# 重命名远程仓库
git remote rename origin upstream
5.2 推送与拉取
# 推送本地分支到远程
git push origin main # 推送到同名远程分支
git push -u origin main # -u 建立关联,以后只需 git push
git push origin main:feature-main # 推送到不同的远程分支名
# 删除远程分支
git push origin --delete feature
# 拉取远程更新(fetch + merge)
git pull origin main
# 仅拉取(不合并)
git fetch origin
# 拉取并变基(保持线性历史)
git pull --rebase origin main
# 强制推送(危险!会覆盖远程历史)
git push --force origin main
git push --force-with-lease origin main # 更安全的强制推送
fetch vs pull 的区别:
# fetch:只下载,不合并
git fetch origin
git log origin/main # 查看远程更新
git diff main origin/main # 查看差异
git merge origin/main # 手动合并
# pull:下载并自动合并
git pull origin main # 等同于 fetch + merge
5.3 远程分支与追踪
# 创建本地分支追踪远程分支
git checkout -b feature origin/feature
# 查看追踪关系
git branch -vv
# main a1b2c3d [origin/main] 修复登录Bug
# feature e4f5g6h [origin/feature] 添加支付功能
# 设置上游分支
git branch -u origin/main
# 查看所有远程分支
git branch -r
# 同步远程分支信息(清理已删除的远程分支)
git remote prune origin
5.4 常见协作场景
场景1:推送被拒绝(远程有新提交)
# 错误信息
! [rejected] main -> main (fetch first)
# 解决方案1:先 pull 再 push
git pull origin main
git push origin main
# 解决方案2:pull --rebase(更干净)
git pull --rebase origin main
git push origin main
场景2:多人修改同一文件
# 1. pull 时出现冲突
git pull origin main
# 2. 解决冲突
# 编辑冲突文件,删除 <<<<<<< ======= >>>>>>> 标记
# 3. 标记为已解决
git add <conflict-file>
# 4. 完成合并
git commit
git push origin main
场景3:误推送到错误分支
# 1. 撤销远程提交(保留修改)
git reset --soft HEAD~1
git push --force origin main
# 2. 或使用 revert(更安全,不改变历史)
git revert HEAD
git push origin main