◆

Git remote 远程仓库管理命令详解

2023-02-02 01:370

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

一个仓库可以挂多个远程。典型用法有两个:一是同时往 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
💬留言板0

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

PAGE LOAD / LIVEGit remote 远程仓库管理命令详解加载中