讲解

到目前为止所有操作都发生在本地仓库。要和他人协作或备份到云端,需要关联「远程仓库」(remote)——同一个项目在服务器上的另一份拷贝。git clone 下来的仓库自带一个名叫 origin 的远程,指向克隆来源;git init 起家的仓库则需要手动添加:git remote add origin 仓库地址。origin 只是约定俗成的默认名字,可以起任何名字,也可以关联多个远程。

管理远程的命令很直白:git remote -v 列出所有远程及其地址(fetch 和 push 各一行);git remote show origin 显示详细信息(跟踪哪些分支、本地分支与远程的对应关系);git remote rename 旧名 新名 改名;git remote remove 名字 删除关联(只删关联,不影响远程仓库本身)。改地址用 git remote set-url origin 新地址,比如从 HTTPS 换成 SSH。

一个典型场景是把本地项目首次推上 GitHub:在 GitHub 网页建一个空仓库(不要勾选初始化 README,否则两边历史无关会推不上去),然后 git remote add origin 地址、git push -u origin main。另一个常见场景是 fork 协作:你 fork 了别人的项目,origin 指向你的 fork,再 git remote add upstream 原仓库地址,upstream 约定俗成指向上游原仓库,用来同步原作者的更新。

示例

下面用本地路径代替 GitHub 地址来演示(真实执行,效果与远程完全一致——Git 不在乎远程是网址还是路径):

git remote add origin ../origin.git
git remote -v
git push -u origin main
git push origin v0.1.0
git ls-remote origin
git remote show origin

git ls-remote 列出远程上的所有引用(分支和标签),是验证远程状态的只读命令。真实项目中的远程操作长这样(需要网络,示意):

# 仅示意:真实项目中 origin 指向托管平台
git remote add origin https://github.com/yourname/your-repo.git
git remote set-url origin git@github.com:yourname/your-repo.git
git remote rename origin upstream
git remote remove upstream

常见坑

  • 在 GitHub 建仓库时勾选了初始化 README:远程有了一个本地没有的提交,直接 push 被拒绝。要么建空仓库,要么先 pull --rebase 把远程提交合进来。
  • remote add 时名字重复或地址打错:origin 已存在会报错,用 git remote set-url 改地址,或 git remote remove 后重加。
  • 以为 remote remove 会删远程数据:它只是删除本地的关联配置,服务器上的仓库纹丝不动。
  • 搞不清本地分支和远程分支的关系:git branch -a 里的 remotes/origin/main 是本地缓存的「远程分支快照」,它只在 fetch/pull 时更新,不是远程的实时状态。

小结

remote 管理本地仓库与远程的关联:add/-v/show/rename/remove/set-url;origin 指向自己的仓库,upstream 指向上游。下一章学习在两边之间同步代码:push 和 pull。