适用系统:Windows 10/11(Git Bash)、macOS、Linux 全系列
前置条件:已安装 Git ≥ 2.30,本地至少有一次 git commit
0.统一准备:先看自己走到哪一步
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| 有没有提交 | git log --oneline |
能看到一行或多行提交 |
| 有没有远端 | git remote -v |
没有输出表示还没绑远端 |
| 协议偏好 | 自己决定 | 公司网络封 22 端口就选 HTTP;想一次性免密就选 SSH |
下文全部假设:
-
本地文件夹:
/d/test2git(Windows 路径写法) -
Gitee 仓库名:
aasad -
GitHub 仓库名:
aasad -
你的用户名:
zhangchengyuan
1. 路线 A:HTTP 推送 → Gitee(私人令牌版)
1.1 远端先建空仓库
-
浏览器打开 https://gitee.com
-
右上角「+」→ 新建仓库 → 输入仓库名
aasad→ 不要勾选任何初始化选项 (README/.gitignore/LICENSE 都留空)→ 创建创建后页面会出现两行地址,选 HTTPS 那行:
https://gitee.com/zhangchengaaa/aasad.git
1.2 本地绑定远端
bash
cd /d/test2git
git remote add origin https://gitee.com/zhangchengaaa/aasad.git
1.3 生成「私人令牌」(Personal Access Token)
-
右上角头像 → 设置 → 安全设置 → 私人令牌 → 生成新令牌
-
仅勾选 repo (仓库读写)即可 → 提交 → 立刻复制令牌字符串(刷新后永不再显示)
1.4 清除可能存在的旧凭据(首次可跳过)
| 系统 | 操作 |
|---|---|
| Windows | 控制面板 → 用户帐户 → 凭据管理器 → Windows 凭据 → 找到 git:https://gitee.com → 删除 |
| macOS | git credential-cache exit 或 security delete-internet-password -s gitee.com |
| Linux | git credential-cache exit 或直接删文件 ~/.git-credentials |
1.5 第一次推送
git pull --rebase origin master
git push -u origin master
弹窗/终端提示:
Username:zhangchengyuan
Password:把 1.3 复制的令牌粘进去(不会显示字符,正常)
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done.
Branch 'master' set up to track remote 'master' from 'origin'.
以后同一台机器再次 push 不会再问,Git 会自动把令牌存进系统钥匙链/凭据管理器。
2. 路线 B:HTTP 推送 → GitHub(Classic Token 版)
2.1 远端建空仓库
Repository name 填 aasad → 选 Private/Public 随意 → 不要创建 README → Create repository
页面出现:
https://github.com/zhangchengaaa/aasad.git
2.2 本地绑定
git remote add origin https://github.com/zhangchengyuan/aasad.git
2.3 生成 Classic Personal Access Token
-
右上角头像 → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token
-
勾选权限:repo 整组全打钩 → Generate → 立刻复制
2.4 清旧凭据(同上)
2.5 推送
git push -u origin master
Username:zhangchengyuan
Password:粘 token
成功同 1.5。
3. 路线 C:SSH 推送 → Gitee(永久免密)
3.1 一次性生成密钥(全局只要一次)
# 查看是否已存在
ls ~/.ssh/id_ed25519.pub
# 没有就生成
ssh-keygen -t ed25519 -C "2037572328@qq.com"
# 一路回车,密码短语可空
默认得到:
私钥 ~/.ssh/id_ed25519
公钥 ~/.ssh/id_ed25519.pub
3.2 把公钥添加到 Gitee
cat ~/.ssh/id_ed25519.pub
复制输出 → Gitee 头像 → 设置 → 安全设置 → SSH 公钥 → 添加标题(随意)→ 粘贴 → 确定
3.3 确认连通性
ssh -T git@gitee.com
首次提示:
The authenticity of host 'gitee.com (180.76.198.225)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 回车,看到:
Hi zhangchengyuan! You've successfully authenticated, but Gitee does not provide shell access.
表示成功。
3.4 本地改远程地址为 SSH 格式
git remote set-url origin git@gitee.com:zhangchengaaa/aasad.git
3.5 推送
git push -u origin master
不再问密码,直接完成。
4. 路线 D:SSH 推送 → GitHub(永久免密)
4.1 密钥生成
同 3.1(可复用同一套密钥)
4.2 把公钥添加到 GitHub
复制 id_ed25519.pub 内容 → GitHub 头像 → Settings → SSH and GPG keys → New SSH key → 贴入 → Add SSH key
4.3 确认连通性
ssh -T git@github.com
输入 yes 后看到:
Hi zhangchengyuan! You've successfully authenticated, but GitHub does not provide shell access.
4.4 本地改远程地址
git remote set-url origin git@github.com:zhangchengyuan/aasad.git
4.5 推送
git push -u origin master
一样不再输密码。
5. 四条路线一键对照表
| 步骤 \ 路线 | A. HTTP Gitee | B. HTTP GitHub | C. SSH Gitee | D. SSH GitHub |
|---|---|---|---|---|
| 远端空仓库 | 不要初始化 | 不要初始化 | 不要初始化 | 不要初始化 |
| 本地绑定 | git remote add origin https://... |
同左 | git remote set-url origin git@gitee.com:用户/仓库.git |
git@github.com:用户/仓库.git |
| 认证材料 | 私人令牌 | Classic PAT | SSH 公钥 | SSH 公钥 |
| 是否永久免密 | ✅(凭据管理器) | ✅(凭据管理器) | ✅ | ✅ |
| 端口被墙 | 80/443 通行 | 80/443 通行 | 22(可改 443) | 22(可改 443) |
6. 首次推送失败高频报错对照
| 报错原文 | 含义 | 一句话解决 |
|---|---|---|
Incorrect username or password |
令牌填错或旧密码残留 | 删凭据重新输最新令牌 |
The token username invalid |
Gitee 用邮箱当用户名 | 用户名栏填 Gitee 登录名,不是邮箱 |
remote contains work you do not have locally |
远端有文件你没拉 | git pull --rebase origin master 再 push |
fatal: 'orgin' does not appear to be a git repository |
手滑打错 remote 名 | 重新 git remote set-url |
Permission denied (publickey) |
SSH 公钥没对上 | 重新复制公钥;确认是 git@ 地址不是 https |
ssh: connect to host github.com port 22: Connection timed out |
公司封 22 | 在 ~/.ssh/config 把 22 转发到 443(见下方附录) |
7. 附录:SSH 走 443 端口(被墙场景)
编辑 ~/.ssh/config(没有就新建):
Host github.com
HostName ssh.github.com
Port 443
User git
Host gitee.com
HostName gitee.com
Port 443
User git
保存后 ssh -T git@github.com / ssh -T git@gitee.com 即可走 443,几乎不会被防火墙拦。
8. 终极大检查清单(push 前打钩)
-
\] `git log` 能看到至少一次提交
-
\] HTTP 路线:令牌没过期、用户名不是邮箱
-
\] 远端仓库是"空"的,或你已 `git pull --rebase` 合并过历史