首次推送失败主因是本地未初始化、远程含readme导致冲突或remote url错误;须在项目根目录git init,新建远程仓库时取消readme初始化,或用git pull origin main --allow-unrelated-histories合并并解决readme冲突,再git push -u origin main。

直接推不上去,八成是本地没初始化、远程有 README 冲突、或者 git remote add 时 URL 错了——不是权限问题,就是流程漏步。
git init 必须在项目根目录执行,否则后续全错
很多人 cd 进错目录,比如进到 src/ 或 dist/ 下执行 git init,结果只把子目录纳入管理。真正的项目根目录,是包含 package.json、README.md 或你主入口文件(如 index.html)的那层。
- 用
pwd(mac/Linux)或cd(Windows)确认当前路径是否正确 -
git init后检查有没有生成.git/文件夹(需开启显示隐藏文件) - 如果误初始化了,删掉
.git文件夹再重来——别用git deinit,它不存在
远程仓库不能带 README 初始化,否则 git pull 会失败
Gitee/GitHub/GitLab 新建仓库时,只要勾选了“使用 README 初始化”,远程就会多出一个 commit,而你的本地是空仓库,直接 git push 会被拒绝:提示 non-fast-forward 或 failed to push some refs。
- 正确做法:新建远程仓库时**取消勾选** README 相关选项
- 如果已经勾选了,必须先
git pull origin master --allow-unrelated-histories合并(注意分支名可能是main,用git branch -r查看远程分支) - 合并后可能产生冲突,
README.md是最常冲突的文件,手动删掉或保留一方即可
git remote add 的 URL 要匹配协议和权限方式
复制仓库地址时,Gitee/GitHub 页面右上角给的链接默认是 HTTPS 格式(如 https://gitee.com/xxx/yyy.git),但如果你配过 SSH key,就得换成 SSH 地址(如 git@gitee.com:xxx/yyy.git)。混用会导致认证失败或 403。
- 查当前 remote:运行
git remote -v,看输出的 URL 是https://还是git@ - 删错的 remote:
git remote remove origin - 重设正确地址:
git remote add origin https://gitee.com/xxx/yyy.git(HTTPS)或git remote add origin git@gitee.com:xxx/yyy.git(SSH) - SSH 方式需提前运行
ssh -T git@gitee.com测试连通性
首次 push 必须带 -u,且分支名要对得上
git push origin master 报错 “upstream not set”?说明没建立本地分支和远程分支的追踪关系。而 git push -u origin master 中的 -u(即 --set-upstream)就是干这个的。
- 确认当前分支名:
git branch看哪个分支前有*;新项目常用master,但 GitHub 默认是main,Gitee 新建仓库也可能是main - 如果本地是
main,远程期望也是main,就用git push -u origin main - 不想改本地分支名,又想推到远程
master,可用git push -u origin main:master - 别乱加
-f:仅当明确要覆盖远程历史时才用,首次推送几乎不需要
最容易被忽略的是分支名不一致和远程 README 冲突——这两点占首次推送失败的七成以上。操作前花 10 秒看一眼 git branch -r 和远程仓库页面,比报错后再查日志快得多。











