>> >> >> Reference << << << <<<<<<Ref>>>>>>
Git Remote
Modified: 2025-12-31 | Author:ljf12825

git remote

git remote是Git中用于管理远程仓库地址的工具命令
它并不是用来直接传输数据的,而是用来记录、查看和修改远程仓库的别名和地址
可以理解为:

基本用法

查看现有远程仓库

git remote # 只显示名字(如 origin)
git remote -v # 显示名字和对应的URL(fetch和push的地址)

会显示

origin  git@github.com:username/respositoryname.git (fetch)
origin  git@github.com:username/respositoryname.git (push)

添加远程仓库

git remote add <别名> <仓库URL>

例如

git remote add origin git@github.com:username/respositoryname.git

惯例: 第一个远程仓库通常叫origin 可以有多个远程仓库,例如:

  • origin -> GitHub
  • gitee -> Gitee
  • backup -> 自建服务器

删除远程仓库

git remote remove <别名>

或者旧写法

git remote rm <别名>

修改远程仓库地址

git remote set-url <别名> <新URL>

重命名远程仓库

git remote rename <旧名> <新名>

常见场景

  1. 本地已有项目,推送到GitHub
git init
git add .
git commit -m "init commit"
git remote add 别名 URL
git push -u 别名 main
  1. 一个项目多个远程
git remote add 别名1 URL1
git remote add 别名2 URL2

推送到URL1

git push 别名1 main

推送到URL2

git push 别名2 main
  1. 远程地址变更(换账号或换仓库)
git remote set-url origin git@github.com:newuser/newrepo.git

深入原理

.git/config里,git remote其实是操作[remote "<name>"]这部分

[remote "origin"]
    url = URL
    fetch = +refs/heads/*:refs/remotes/origin/*

特别的

git push -u origin main

-u会绑定默认分支,省去后续输入

git remote show origin

这个会列出fetch/push URL、追踪分支等详细信息

分支与仓库

  1. 本地仓库(Local Repository) 定义
    个人电脑上这个项目的完整Git仓库,包含:

它其实就是.git目录存的东西

特点\

  1. 本地分支(Local Branch) 定义
    本地仓库里正在操作的“开发线路”,例如:maindevfeature-physics

特点\

  1. 远程仓库(Remote Repository) 定义
    放在服务器上的Git仓库

特点\

  1. 远程分支(Remote Branch) 定义
    存在于远程仓库的分支,比如origin/mainorigin/dev

特点\

HTTPS与SSH

HTTPS和SSH是Git中连接远程仓库最常见的两种方式

在Git中,远程仓库是通过一个URL来标识的,比如

https://github.com/username/resposityname.git
git@github.com:username.resposityname.git

它们本质上只是两种不同的通信协议

认证方式

Git访问远程仓库是,最重要的就是身份验证,防止别人随便推送代码

HTTPS

SSH

特性HTTPSSSH
安全性高(依赖 TLS 加密)高(公私钥加密)
认证方式用户名+Token公钥+私钥
第一次配置难度中(需要生成密钥并配置)
后续使用体验需要输入凭证(可缓存)免密码,直接用
防火墙兼容性高(443端口几乎都开放)有些公司防火墙会屏蔽22端口
适合场景一次性、小项目、受限网络环境日常开发、频繁推送、自动化部署

配置方式

HTTPS方式
添加远程仓库

git remote add 别名 URL

首次push

git push -u 别名 main
# 需要输入GitHub用户名 + Personal Access Token

可以用

git config --gloabl credential.helper stroe

来缓存凭证

SSH方式\

  1. 生成密钥对
ssh-keygen -t rsa -b 4096 -C "邮箱“

一路回车,默认生成

~/.ssh/id_rsa # 私钥
~/.ssh/id_rsa.pub # 公钥
  1. 把公钥添加到GitHub
  1. 测试连接
ssh -T git@github.com

如果看到

Hi uername You're successfully authenticated...

就成功了 4. 添加远程仓库

git remote add 别名 SSHURL

实际建议

常见问题

如果使用SSH传输,但是需要输入密码,可以排查以下问题

  1. 需要生成和加载SSH密钥,公钥要在远程仓库添加,否则会走密码认证

  2. 远程地址不是SSH格式

  3. SSH Agent没有加载密钥

eval "(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
ssh-add -l

如果没有输出任何密钥指纹,就说明还没加载

  1. SSH配置文件问题 建议在~/.ssh/config里明确指定
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa

这样Git访问github.com时会强制用密钥

  1. 权限问题
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh

什么时候不需要手动 ssh-add

什么时候必须手动 ssh-add

如何验证是否走了密钥认证\

ssh -T git@github.com
Hi uername You're successfully authenticated...

ssh:connect to host github.com port 22: Connection timed out

这个错误说明客户端尝试通过22号端口访问github.com,但是连接超时了
可能原因:

  1. 公司/学校/网络环境屏蔽了22端口 很多网络会直接拦截SSH默认端口(22),防止用SSH隧道

  2. 防火墙/代理设置 本地Windows防火墙、杀毒软件、代理软件也可能阻止了

  3. GitHub服务器没问题 GitHub本身基本不会挂掉,问题大多在网络或配置
    如果怀疑GitHub网站状态有问题,可以查看GitHub官方服务状态网站,它会显式显示GitHub当前的运行状况(是否宕机、部分功能异常、API/SSH/网页服务延迟等)
    https://www.githubstatus.com/

解决方案
方案一:改用HTTPS

方案二:使用GitHub的443端口SSH GitHub提供了一个特殊的SSH地址,可以通过443端口走SSH,绕过22被封的情况\

  1. 修改~/.ssh/config文件(Windows上在`C:\Users<username>.ssh\config)
Host github.com
  Hostname ssh.github.com
  Port 443
  User git
  1. 测试连接
ssh -T git@github.com

如果成功,会提示

Hi username! You've successfully authenticated...