Git remote 远程仓库管理命令详解
git remote 管理的是本地仓库记录的一组远程仓库地址。这里有个概念要先理清:远程仓库名(最常见的 origin)只是一个本地别名,它并不是 git 的关键字,也和服务器上的任何东西无关,纯粹是我们给一串 URL 起的短名字,方便在 git push / git fetch 时少打字。git clone 时 git 自动把源地址记为 origin,这只是默认约定。
这些别名和 URL 都存在仓库自己的 .git/config 里,所以下面所有命令都是仓库级的,不影响其他项目。理解了这一点,多远程(同时推 GitHub 和 Gitee)、换仓库地址、fork 后同步上游这些需求就都能用同一套命令解决。
git remote
用于在远程仓库的操作
- 显示所有远程仓库:
不带参数的 git remote 只列别名,加上 -v(verbose)才会把对应的 URL 一起打出来。输出通常是每个远程两行,分别标着 (fetch) 和 (push),因为 git 允许拉和推用不同的地址,正常情况下两行是一样的。
git remote -v
- 显示某个远程仓库的信息:
tip
此处的 [remote] 可以是远程仓库的 url 也可以是 url 对应的别名
比 -v 详细得多,会列出该远程的所有分支、本地分支与远程分支的跟踪关系,以及 git push 默认会推到哪里。注意它会实际连一次网去查询远程分支列表,所以网络不通时会卡住;只想看本地已缓存的信息,加 -n 跳过联网。
git remote show [remote]
添加远程版本库:
- [url]: 远程仓库
url
- [url]: 远程仓库
一个仓库可以挂多个远程。典型用法有两个:一是同时往 GitHub 和 Gitee 推同一份代码,二是 fork 别人的项目后把原仓库加成 upstream,用来同步上游更新。别名重复时命令会报错而不是覆盖,想改地址得用后面的 set-url。
git remote add [shortname] [url]
- 删除远程仓库
只是从 .git/config 里删掉这条别名记录和相关的跟踪配置,服务器上的仓库和代码一点都不会动,所以这个操作是安全的,删错了重新 add 回来即可。同时也会清掉本地缓存的 remotes/<name>/* 远程跟踪分支。
git remote rm name
- 修改仓库名
改别名,跟踪关系会一起迁移过去,比"删掉再重新添加"更省事,后者会把已有分支的上游配置弄丢。最常见的场景是 fork 流程里把 origin 改名成 upstream,再把自己的 fork 添加为新的 origin。
git remote rename old_name new_name
修改远程仓库地址
仓库迁移、从 HTTPS 换成 SSH 时用得最多。别用"先 rm 再 add",直接改 URL 更干净:
git remote set-url origin git@github.com:user/repo.git
改完用 git remote -v 确认一遍。HTTPS 和 SSH 的区别只在认证方式:HTTPS 靠账号密码或 token,SSH 靠密钥,代码内容和提交历史完全一样,随时可以来回切。
如果只想改推送地址、保留原来的拉取地址(比如从上游拉、往自己 fork 推),加 --push:
git remote set-url --push origin git@github.com:me/my-fork.git
清理已删除的远程分支
远程分支在服务器上被删了(比如 PR 合并后自动删分支),本地的远程跟踪分支不会自动消失,git branch -a 里会一直留着一堆早已不存在的名字。用下面这条同步:
git remote prune origin
它只删本地缓存的远程跟踪引用,不会碰任何本地分支,也不会影响服务器。动手前想先确认会删掉哪些,加 --dry-run 空跑一次:
git remote prune origin --dry-run
想让每次拉取都自动做这个清理,配一次全局开关就行:
git config --global fetch.prune true

还没有留言,来发表第一条吧~