跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash大前端

本地项目首次推送至 Git 远程仓库指南

将本地项目首次推送到 GitHub/Gitee/GitLab 等远程仓库的完整流程。主要包含四个步骤:本地初始化、创建远程空仓库、关联并推送、验证成功。文章详细解释了 git init、add、commit、remote add、push 等命令的使用,强调了.gitignore 的重要性及分支命名规范。同时提供了常见错误(如历史记录冲突、密码认证失效)的解决方案,以及可视化工具推荐和最佳实践总结,帮助开发者避免新手陷阱。

Pythonist发布于 2026/3/29更新于 2026/7/2450 浏览
本地项目首次推送至 Git 远程仓库指南

本地项目首次推送 Git 远程仓库

一、为什么需要这篇指南?

你是否曾遇到过这样的场景:

  1. 本地辛苦写好的项目,想传到 GitHub 上备份或展示
  2. 跟着网上的教程操作,却在某个步骤卡住报错
  3. 好不容易推送成功,却发现把 node_modules、.idea 等无关文件也传上去了
  4. 团队协作时,因为推送问题耽误了时间

如果你有以上任何一点困扰,那么这篇教程就是为你准备的。我将把首次推送的完整流程拆解成 4 个不可颠倒的步骤,并附上每个步骤的详细解释和常见错误解决方案。

二、完整 4 步推送流程(图文详解)

第 1 步:本地初始化(建立 Git 跟踪)

核心目标:让 Git 开始管理你的项目文件

# 1. 进入项目根目录
cd /path/to/your/project

# 2. 初始化 Git 仓库
git init
# 输出示例:Initialized empty Git repository in /path/to/your/project/.git/
# 此时会在项目目录下生成一个隐藏的.git 文件夹

# 3. 添加所有文件到暂存区
git add .
# 注意:这个"."代表当前目录所有文件,也可以指定具体文件

# 4. 提交到本地仓库
git commit -m "first commit"
# 提交消息要简洁明了,这里用"first commit"作为首次提交

关键点解析:

  • git init 只需执行一次,创建本地 Git 仓库
  • git add . 中的点号代表当前目录及子目录所有文件(除了.gitignore 中忽略的)
  • git commit 的 -m 参数必须跟上提交说明,否则会进入编辑器模式(新手容易卡在这里)

第 2 步:创建远程空仓库

核心目标:在代码托管平台创建一个'空房子'等待你的代码入住

平台操作位置特别注意
GitHub点击右上角 + → New repository不要勾选 'Initialize this repository with a README'
Gitee(码云)点击右上角 + → 新建仓库不要勾选 '使用 Readme 文件初始化这个仓库'
GitLab点击导航栏 + → New project不要勾选 'Initialize repository with a README'

为什么不能勾选 README? 如果远程仓库初始化时有了 README 文件,它就了。当你推送时,Git 会发现本地和远程的,导致推送失败。需要先拉取合并,这对新手来说会增加复杂度。


不是空仓库
历史记录不同

第 3 步:关联远程仓库并推送

核心目标:建立本地与远程的连接,并上传代码

# 1. 添加远程仓库地址(给远程仓库起个别名叫 origin)
git remote add origin https://github.com/yourname/yourrepo.git
# 这里把地址替换成你自己的仓库地址

# 2. 创建并切换到主分支(默认分支名可能是 master 或 main)
git branch -M main
# 如果本地默认是 master 分支,这行命令会把它改名为 main 并切换过去

# 3. 首次推送(建立跟踪关系)
git push -u origin main
# -u 参数表示建立本地分支与远程分支的跟踪关系
# 以后在这个分支上直接 git push 即可,无需指定远程和分支

关键点解析:

  • git remote add origin [地址]:origin 是远程仓库的别名,可以自定义,但大家都用origin
  • git branch -M main:-M 是 --move --force 的缩写,强制重命名分支
  • git push -u origin main:-u 是 --set-upstream 的缩写,只在第一次推送时需要

第 4 步:验证推送成功

核心目标:确认代码已安全到达远程仓库

  1. 网页验证:
    • 刷新你的 GitHub/Gitee/GitLab 仓库页面
    • 应该能看到你推送的文件列表
    • 点击文件可以查看内容是否完整

命令行验证:

git status
# 应该显示:On branch main, your branch is up to date with 'origin/main'

git log --oneline
# 可以看到提交历史,确认提交已记录

三、一条命令搞定(懒人/高手版)

如果你已经熟悉流程,或者想快速操作,这里有一条命令整合了所有步骤:

git init && git add . && git commit -m "init" && git remote add origin <仓库地址> && git branch -M main && git push -u origin main

注意事项:

  • 把 <仓库地址> 替换成你的实际仓库 URL
  • 确保当前目录是你的项目根目录
  • 确保远程仓库是空的(没勾选 README)
  • 这条命令会顺序执行,任何一步出错都会停止

四、必须知道的 3 个关键注意事项

1. .gitignore 文件:你的'忽略清单'

在第一步执行 git add . 之前,强烈建议创建 .gitignore 文件:

# 操作系统生成的文件
.DS_Store
Thumbs.db

# IDE 和编辑器配置
.vscode/
.idea/
*.swp
*.swo

# 依赖目录(根据你的项目类型)
node_modules/
__pycache__/
target/
build/
dist/
*.class

# 环境配置文件(不要上传敏感信息!)
.env
*.key
*.pem

创建方法:

# 在项目根目录创建.gitignore
echo -e ".DS_Store\nnode_modules/\n.env" > .gitignore
# 然后执行 git add . 和后续操作

2. 分支命名规范

现代 Git 的默认分支名发生了变化:

  • 旧版本:默认分支叫 master
  • 新版本:默认分支叫 main

如何知道自己的 Git 版本?

git --version
git config --global init.defaultBranch

如果遇到分支名问题,可以这样处理:

# 如果本地是 master,想改为 main
git branch -M main
# 或者,如果远程希望用 master
git push -u origin master

3. SSH vs HTTPS:两种远程地址

你在 GitHub 上会看到两种仓库地址:

  • HTTPS: https://github.com/username/repo.git
  • SSH: [email protected]:username/repo.git
对比项HTTPSSSH
认证方式用户名 + 密码/TokenSSH 密钥对
速度较慢较快
推荐场景新手、临时使用经常使用、追求效率

新手建议用 HTTPS,虽然每次推送需要输密码,但更简单。可以在 Git 中配置凭证存储:

git config --global credential.helper store
# 存储密码(谨慎使用)

五、常见错误及解决方案(坑点大全)

错误 1:src refspec main does not match any

错误信息:

error: src refspec main does not match any
error: failed to push some refs to 'github.com:xxx/xxx.git'

原因分析:

  1. 本地还没有任何提交(没执行 git commit)
  2. 本地分支名和推送的分支名不一致

解决方案:

# 1. 确认本地有提交
git log
# 如果显示 fatal: your current branch 'main' does not have any commits yet
# 说明确实没有提交

# 2. 执行提交
git add .
git commit -m "initial commit"

# 3. 再次推送
git push -u origin main

错误 2:failed to push some refs to ...

错误信息:

! [rejected] main -> main (fetch first)
error: failed to push some refs to 'github.com:xxx/xxx.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.

原因分析:
远程仓库不是空的(最常见的是创建时勾选了 README)

解决方案:

# 方法 1:拉取远程内容并合并(推荐)
git pull origin main --allow-unrelated-histories
# --allow-unrelated-histories 允许不相关的历史合并
# 然后解决可能的冲突,再推送
git push origin main

# 方法 2:强制推送(谨慎使用)
git push -f origin main
# -f 是 --force 的缩写,会覆盖远程历史
# 注意:如果团队其他人在这个仓库有工作,不要用这个方法!

错误 3:support for password authentication was removed

错误信息:

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls

原因分析:
GitHub 从 2021 年 8 月起不再支持账号密码验证

解决方案:

# 方法 1:使用 Personal Access Token(PAT)
# 1. 在 GitHub → Settings → Developer settings → Personal access tokens 生成 token
# 2. 推送时用 token 代替密码
git push -u origin main
# 用户名:你的 GitHub 用户名
# 密码:刚才生成的 token(不是登录密码!)

# 方法 2:使用 SSH 密钥
# 1. 生成 SSH 密钥:ssh-keygen -t ed25519 -C "[email protected]"
# 2. 添加到 GitHub:Settings → SSH and GPG keys
# 3. 修改远程地址为 SSH 格式
git remote set-url origin [email protected]:username/repo.git
# 4. 再次推送

错误 4:Updates were rejected because the tip of your current branch is behind

错误信息:

! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to '...'

原因分析:
远程有新的提交,而本地没有拉取更新

解决方案:

# 先拉取更新
git pull origin main
# 如果有冲突,解决冲突后提交
git add .
git commit -m "merge remote changes"
# 再推送
git push origin main

六、可视化工具辅助(适合完全新手)

如果你对命令行感到恐惧,可以使用可视化工具:

1. GitHub Desktop

  1. 下载安装 GitHub Desktop
  2. File → Add local repository
  3. 选择你的项目文件夹
  4. 点击 Publish repository
  5. 填写信息后点击 Publish

2. VS Code 内置 Git

  1. 用 VS Code 打开项目
  2. 点击左侧源代码管理图标(Ctrl+Shift+G)
  3. 点击'初始化仓库'
  4. 输入提交消息,点击√提交
  5. 点击'…' → 推送

七、工作流程图解

开始
  ↓
本地初始化 (git init/add/commit)
  ↓
远程仓库是否为空?
  ├─ 是 → 关联远程并推送 (git remote add/push -u)
  │        ↓
  │     ✅ 推送成功
  │        ↓
  │     结束
  └─ 否 → 选择解决方案
           ↓
       拉取合并 (git pull --allow-unrelated-histories)
       或
       强制覆盖 (git push -f) ⚠️慎用
           ↓
       解决冲突并提交
           ↓
       验证结果
           ↓
       结束

八、最佳实践总结

  1. 顺序不可颠倒:先本地→再远程→最后推送
  2. 远程要空:创建仓库时不要初始化 README
  3. 先加.gitignore:避免上传无用文件
  4. 提交信息清晰:用英文简练描述提交内容
  5. 首次用-u:建立跟踪关系,以后直接 git push
  6. 遇到错误别慌:对照本文的'常见错误'部分解决

九、延伸学习

当你掌握了首次推送后,可以进一步学习:

  1. 分支管理:git branch, git checkout, git merge
  2. 撤销操作:git reset, git revert, git checkout --
  3. 暂存更改:git stash
  4. 查看历史:git log的各种用法

目录

  1. 本地项目首次推送 Git 远程仓库
  2. 一、为什么需要这篇指南?
  3. 二、完整 4 步推送流程(图文详解)
  4. 第 1 步:本地初始化(建立 Git 跟踪)
  5. 1. 进入项目根目录
  6. 2. 初始化 Git 仓库
  7. 输出示例:Initialized empty Git repository in /path/to/your/project/.git/
  8. 此时会在项目目录下生成一个隐藏的.git 文件夹
  9. 3. 添加所有文件到暂存区
  10. 注意:这个"."代表当前目录所有文件,也可以指定具体文件
  11. 4. 提交到本地仓库
  12. 提交消息要简洁明了,这里用"first commit"作为首次提交
  13. 第 2 步:创建远程空仓库
  14. 第 3 步:关联远程仓库并推送
  15. 1. 添加远程仓库地址(给远程仓库起个别名叫 origin)
  16. 这里把地址替换成你自己的仓库地址
  17. 2. 创建并切换到主分支(默认分支名可能是 master 或 main)
  18. 如果本地默认是 master 分支,这行命令会把它改名为 main 并切换过去
  19. 3. 首次推送(建立跟踪关系)
  20. -u 参数表示建立本地分支与远程分支的跟踪关系
  21. 以后在这个分支上直接 git push 即可,无需指定远程和分支
  22. 第 4 步:验证推送成功
  23. 应该显示:On branch main, your branch is up to date with 'origin/main'
  24. 可以看到提交历史,确认提交已记录
  25. 三、一条命令搞定(懒人/高手版)
  26. 四、必须知道的 3 个关键注意事项
  27. 1. .gitignore 文件:你的“忽略清单”
  28. 操作系统生成的文件
  29. IDE 和编辑器配置
  30. 依赖目录(根据你的项目类型)
  31. 环境配置文件(不要上传敏感信息!)
  32. 在项目根目录创建.gitignore
  33. 然后执行 git add . 和后续操作
  34. 2. 分支命名规范
  35. 如果本地是 master,想改为 main
  36. 或者,如果远程希望用 master
  37. 3. SSH vs HTTPS:两种远程地址
  38. 存储密码(谨慎使用)
  39. 五、常见错误及解决方案(坑点大全)
  40. 错误 1:src refspec main does not match any
  41. 1. 确认本地有提交
  42. 如果显示 fatal: your current branch 'main' does not have any commits yet
  43. 说明确实没有提交
  44. 2. 执行提交
  45. 3. 再次推送
  46. 错误 2:failed to push some refs to ...
  47. 方法 1:拉取远程内容并合并(推荐)
  48. --allow-unrelated-histories 允许不相关的历史合并
  49. 然后解决可能的冲突,再推送
  50. 方法 2:强制推送(谨慎使用)
  51. -f 是 --force 的缩写,会覆盖远程历史
  52. 注意:如果团队其他人在这个仓库有工作,不要用这个方法!
  53. 错误 3:support for password authentication was removed
  54. 方法 1:使用 Personal Access Token(PAT)
  55. 1. 在 GitHub → Settings → Developer settings → Personal access tokens 生成 token
  56. 2. 推送时用 token 代替密码
  57. 用户名:你的 GitHub 用户名
  58. 密码:刚才生成的 token(不是登录密码!)
  59. 方法 2:使用 SSH 密钥
  60. 1. 生成 SSH 密钥:ssh-keygen -t ed25519 -C "[email protected]"
  61. 2. 添加到 GitHub:Settings → SSH and GPG keys
  62. 3. 修改远程地址为 SSH 格式
  63. 4. 再次推送
  64. 错误 4:Updates were rejected because the tip of your current branch is behind
  65. 先拉取更新
  66. 如果有冲突,解决冲突后提交
  67. 再推送
  68. 六、可视化工具辅助(适合完全新手)
  69. 1. GitHub Desktop
  70. 2. VS Code 内置 Git
  71. 七、工作流程图解
  72. 八、最佳实践总结
  73. 九、延伸学习
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C++ 基础入门:初识、数据类型与运算符
  • 脉脉功能实测:后端开发者如何利用 AI 创作与职场社交
  • JDK 安装与环境配置完整指南
  • 百瑞互联 BR8654A02 蓝牙 6.0 SOC 芯片技术规格
  • AR 健身教练实践:基于 Rokid CXR-M SDK 的落地实现
  • Go语言Map的两种Get操作源码剖析与实现原理
  • Java 类和对象
  • 基于 Qwen3-TTS 和 Whisper ASR 的双向语音对话系统搭建
  • Flutter 三方库 arcade 的鸿蒙化适配指南
  • Open WebUI 与 Ollama 模型文件默认存储路径
  • 基于 STM32 的智能家居环境监测系统设计
  • 无人机智能巡检系统:建筑物立面安全监测解决方案
  • Stable Yogi 皮衣穿搭生成工具本地部署与使用指南
  • MoltBot 对接钉钉 Stream 流式接入配置指南
  • Web3 共识机制解析:PBFT、Tendermint 与 DAG
  • Linux 高频指令详解:which alias man echo cd cp mv
  • 2026 AI 编码工具终局:Claude Code、Cursor、Copilot 深度对比与选型
  • 竞速无人机自主导航 RaceVLA:基于视觉语言动作的代码解析
  • ClawdBot 生产环境实战:Webhook 对接企微/钉钉实现跨平台同步
  • GitHub Desktop 与命令行 Git 效率对比实测

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online