git remote set-url 是修改远程地址的唯一推荐方式,需确保新旧url协议类型一致(ssh或https),否则push会失败;https换源后403需更新凭据管理器中的token;多远程可用git remote add;git 2.28+支持conditional include批量重写url。

git remote set-url 能直接改远程地址,但得先确认旧地址类型
git remote set-url 是唯一推荐的修改方式,不是删了重加。但很多人改完 push 失败,是因为没注意旧 URL 是 SSH 还是 HTTPS —— 这两种协议下新地址的格式必须匹配,否则 git push 会卡在认证或连接拒绝。
- 如果原地址是
git@github.com:user/repo.git(SSH),新地址也得是 SSH 格式,比如换成企业 GitLab 的git@gitlab.example.com:group/project.git - 如果原地址是
@#@#@#@#@#@#@#@#@#@0(HTTPS),新地址就得用 HTTPS,比如带 token 的https://<code>token@gitlab.example.com/group/project.git - 混用会报错:
fatal: unable to access 'https://...': Could not resolve host或Permission denied (publickey)
查当前地址用:git remote get-url origin
HTTPS 地址换源后 push 报 403?大概率是凭据没更新
GitHub、GitLab 等平台近年基本禁用了密码登录 HTTPS,改用 Personal Access Token(PAT)或 OAuth。但系统凭据管理器(Windows Credential Manager / macOS Keychain)可能还存着旧账号密码,导致 git push 直接 403。
- Windows 用户:进「控制面板 → 凭据管理器 → Windows 凭据」,删掉所有含
git:或对应域名的条目 - macOS 用户:打开「钥匙串访问」,搜索
github.com或新域名,删掉相关互联网凭据 - Linux(libsecret)用户:用
git credential reject手动清除,输入:git credential reject protocol=https host=gitlab.example.com
下次 push 会重新弹窗或提示输入,这时填 PAT(不是密码)
想同时保留旧远程和新远程?别用 set-url,用 add + push --set-upstream
有些场景需要双远程并存,比如同步推送到 GitHub 和 Gitee(国内镜像)。这时候不该覆盖 origin,而是加个新远程名:
- 添加新远程:
git remote add gitee @#@#@#@#@#@#@#@#@#@1 - 推送当前分支到新远程并设置上游:
git push --set-upstream gitee main - 后续只需
git push gitee即可,不影响 origin
注意:git push --set-upstream 只影响当前分支,其他分支要单独设;如果远程名起冲突(如已有 gitee),先删再加:git remote remove gitee
Git 2.28+ 支持 conditional include,适合多仓库统一换源
如果你维护十几个本地仓库,每个都要手动 set-url,容易漏。Git 2.28 起支持基于路径的配置继承,可在全局配置里按目录批量重写 remote URL:
在 ~/.gitconfig 里加:
[includeIf "gitdir:/path/to/work/"]
path = "/path/to/work/.gitconfig-work"
然后在 /path/to/work/.gitconfig-work 里写:
[url "https://token@gitlab.example.com/"]
insteadOf = https://gitlab.example.com/
这样所有在 /path/to/work/ 下的仓库,只要 remote URL 以 https://gitlab.example.com/ 开头,就会自动替换成带 token 的版本
这个机制不改仓库自身配置,也不影响其他路径下的项目,但要注意 insteadOf 是字符串前缀匹配,别写太宽泛(比如只写 https://)











