☰
Git入门:本地代码推送到GitHub的完整流程
2026/10/17 19:33:54 网站建设 项目流程

1. 项目概述:这条命令到底值不值得学

先说结论:把本地代码推到 GitHub,本质上就是三条 Git 命令的事。git add .、git commit -m "说明"、git push。很多人一听“5分钟学会”就觉得是标题党,但我可以负责任地告诉你,如果你只是想把代码同步到 GitHub 仓库,这五分钟绰绰有余。

但这里有个容易被忽略的坑:大多数人第一次推代码,不是倒在命令上,而是倒在“本地仓库和远程仓库没有关联”这一步。所以我这篇文章不打算只丢给你几条命令,而是把“为什么要这么操作”“每一步在做什么”讲清楚。当你理解了 Git 的工作逻辑,以后再遇到合并冲突、推送被拒绝这类问题,你也能自己排查出个大概方向。

这篇内容适合谁?适合刚接触 Git、刚注册 GitHub、或者一直用“上传 zip 文件”方式来备份代码的同学。如果你已经在公司用 Git 做协作开发,这篇文章对你来说有点基础了,但如果你只是个人开发、写作业、做小项目,把代码推到 GitHub 这个操作,你今天看完就能自己动手。

2. 内容整体设计与思路拆解:本地和远程之间发生了什么

2.1 先理解 Git 的三个“存档区”

很多人学 Git 学得痛苦,是因为一上来就背命令,但脑子里没有画面。我换个说法:Git 的本地操作,本质上就是你在“草稿纸 → 文件夹 → 正式发布”这三个状态之间搬运文件。

  • 工作区:就是你自己电脑上能看到的那些文件,你改了代码,改动的结果只存在于工作区。
  • 暂存区:你可以把它理解成“打包台”。git add就是把你想提交的文件先放到这个打包台上,告诉 Git“我这次要提交的是这些文件,而不是别的”。
  • 版本库:打包完成之后,git commit就是把这些文件封箱,生成一个不可变的版本快照。这个快照有版本号、有提交时间、有提交说明,之后你想回滚到任何一个历史版本,都靠这些快照。

本地仓库里的版本快照,Git 自己是知道的,但 GitHub 服务器不知道。所以还需要一个动作——把本地版本库里的快照同步到远程服务器,这就是git push。

注意:如果你只有git add和git commit,你的代码永远只停留在本地硬盘;如果你只git push而没有本地提交,Git 会报错说“当前分支没有上游分支”或者“Everything up-to-date”,因为你推上去的内容根本没有形成版本快照。

2.2 为什么是 GitHub,而不是直接在网站上传文件

有人可能会问,GitHub 网页上不是可以直接上传文件吗?为什么还要学命令行?

直接网页上传适合一两个文件的场景,但真实项目动辄几十个文件,而且后续每次改动都手动上传,版本管理就完全失控了。更重要的是,Git 的本地版本历史是断网可用的。你在飞机上改了三个小时代码,可以随时git commit,等到了有网的地方,一次git push就把所有提交同步上去。这是网页上传永远无法替代的核心能力。

我更喜欢把 GitHub 理解成一个“代码银行保险箱”。本地仓库是手里的现金,你可以随时存放(commit),但保险箱里的账本只有你主动同步(push)之后,银行(GitHub)才会更新记录。如果中途硬盘坏了,只要最近一次 push 过,代码就还在保险箱里。

3. 核心细节解析与实操要点:推送前必须搞懂的三个关键点

3.1 分支的概念:不要一上来就在主线乱推

第一次推送代码的人,通常看到git push就直接敲回车,结果推到了master或者main分支,也没出什么问题。但如果你之后要和别人协作,或者你想保留“开发版本”和“稳定版本”两个状态,分支就是必须懂的基础概念。

简单说,分支就像一本书的不同章节草稿。main分支是最终发布的定稿,dev分支是你在草稿本上写的新内容。你可以随意在dev分支上折腾,等测试没问题了,再把dev合并回main。

对于个人项目,你可以不用创建额外分支,直接在main上推送也没问题。但如果你打算以后从事开发相关工作,建议第一次推送前就养成创建分支的习惯。基础命令就一条:

git branch -M main

这条命令的意思是把当前分支重命名为main。GitHub 新建仓库默认推荐主分支叫main,但你的 Git 版本可能默认初始化成master,名字不一致会导致推送出现奇怪的提示。先统一分支名,再推送,能省掉很多不必要的麻烦。

3.2 远程仓库地址的关联:为什么总是提示“找不到仓库”

新手最常见的报错长这样:

fatal: 'origin' does not appear to be a git repository fatal: Could not read from remote repository.

这个报错翻译一下就是:Git 根本不知道你要往哪儿推。你没有告诉它远程仓库的地址。

git remote add origin https://github.com/你的用户名/你的仓库名.git

这里的origin是一个代称,你可以把它理解成“我给这个远程地址起了个别名,叫 origin”。之后所有命令都不用再写一长串 URL,直接写origin就行。名字你可以随便起,但社区约定俗成用origin,建议不要标新立异。

3.3 SSH 还是 HTTPS:推送时密码到底怎么填

第一次推送时,很多人在这一步被卡得非常痛苦。如果你用的是 HTTPS 地址,Git 会让你输入 GitHub 的用户名和密码。注意,这里的密码不是你的 GitHub 登录密码,而是一个叫 Personal Access Token 的东西。

这个设计是 GitHub 前几年改的规则,初衷是提高安全性。Token 相当于一把“只拥有某些权限的备用钥匙”,你在 GitHub 网站设置里生成,然后复制粘贴到命令行里当密码用。

如果你不想每次推送都输入用户名和 Token,有两个选择:

  1. 配置 Git 凭据管理器,让它记住凭证。
  2. 改用 SSH 密钥认证,配置好后推送不再需要输入任何密码。

对于新手,我建议先用 HTTPS + Token 把流程跑通,后面有需要再升级 SSH。不要一开始就折腾 SSH,因为密钥生成、配置、测试这几个环节出错概率高,容易打击学习热情。

4. 实操过程与核心环节实现:从零到推送到 GitHub 的完整流程

4.1 第一步:准备好一个本地项目文件夹

假设你已经在电脑上新建了一个项目文件夹,里面放着你的代码文件,比如index.html、app.py、README.md等。打开终端,先进入到这个文件夹:

cd ~/Desktop/my-project

然后初始化本地仓库:

git init

这一步会在当前文件夹下生成一个隐藏的.git文件夹,它负责记录这个项目的所有版本历史。注意:.git文件夹千万不要手动删,删了之后你的版本历史就全没了。

4.2 第二步:配置你的身份信息

第一次使用 Git 时,最好先告诉 Git 你是谁。这个信息会记录在每次提交的版本快照里,方便别人知道某次修改是谁做的。

git config --global user.name "你的用户名" git config --global user.email "你的邮箱"

这里有一个实用技巧:--global参数代表“全局生效”,相当于只设置一次,之后所有项目都用这个身份。如果你只想针对当前项目设置不同身份,去掉--global即可。

4.3 第三步:添加文件到暂存区并生成第一个版本

git add . git commit -m "第一次提交:初始化项目"

git add .里的点号代表“当前目录下所有文件”。如果你只想添加某个文件,可以写成:

git add README.md

添加之后,用git status看一下当前状态,确认没有遗漏文件。git status会明确告诉你哪些文件已经被暂存,哪些文件还没有被跟踪。

4.4 第四步:在 GitHub 网站创建远程仓库

打开 GitHub,点右上角的加号,选择 “New repository”。仓库名称填一个和你本地项目相关的名字,比如my-project。注意,这里不要勾选 “Add a README file”、“Add .gitignore” 这些初始化选项,因为你本地已经有文件了,如果同时初始化会产生冲突。

创建完成后,GitHub 会跳转到一个页面,里面有几个命令提示。你需要用到的是仓库地址,形如:

https://github.com/你的用户名/my-project.git

复制这个地址,回到终端。

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

git remote add origin https://github.com/你的用户名/my-project.git git branch -M main git push -u origin main

这三条命令分别做三件事:关联远程地址、统一主分支名、推送并设置上游关联。-u参数的意思是“记住这次推送的目标”,之后你再推送就可以直接写git push。

如果 HTTPS 认证配置没问题,此时终端会要求输入用户名和密码。用户名填你的 GitHub 用户名,密码填 Token 而不是登录密码。

4.6 第六步:验证推送结果

推送成功后,终端会显示类似这样的输出:

Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (5/5), 980 bytes | 980.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0), reused 0 (delta 0) To https://github.com/你的用户名/my-project.git * [new branch] main -> main branch 'main' set up to track 'remote branch 'main' from 'origin'.

看到[new branch] main -> main,就说明推送成功了。这时候打开 GitHub 仓库页面,刷新一下,就能看到你的代码已经出现在线上。

5. 常见问题与排查技巧实录:我踩过的坑,你大概率也会踩

5.1 推送被拒绝:远程仓库有本地没有的文件

这是最常见的报错之一:

! [rejected] main -> main (fetch first) error: failed to push some refs

出现这个问题的原因,通常是你本地初始化仓库之前,远程仓库里已经有一些文件。比如你在 GitHub 网页创建仓库时勾选了 README,或者别人已经在远程提交过代码。

解决思路很简单:先把远程的文件拉到本地,合并之后再推送。

git pull origin main git push -u origin main

如果git pull之后出现合并冲突,说明本地和远程修改了同一个文件的同一块内容,需要手动编辑文件保留想要的内容,然后再提交一次。

5.2 每次都要输入账号密码,嫌麻烦怎么办

如果你确认自己已经认证成功,但每次推送都要输入一遍用户名和 Token,可以在系统层面开启凭据存储:

git config --global credential.helper store

这个配置会把凭证以明文形式存在电脑上。对于个人开发的电脑,方便程度大于风险;但如果你用的是公用电脑,不建议执行这条命令。

我个人更推荐的方案是配置 SSH,虽然首次配置要花点时间,但之后推送完全免密,体验非常顺滑。

5.3 误把大文件提交了怎么办

很多初学者会把依赖包、生成目录、本地配置文件一起提交到 GitHub。比如 Node.js 项目里的node_modules文件夹,Python 项目里的venv虚拟环境目录。这些文件体积庞大,而且不需要备份到线上。

解决办法是在项目根目录新建一个.gitignore文件,把你不想跟踪的文件名或目录名写进去,这样 Git 会自动跳过它们。以 Node 项目为例:

node_modules/ dist/ .env

需要注意,.gitignore只对“尚未被 Git 跟踪”的文件生效。如果你已经把大文件提交到了本地版本历史里,光加.gitignore是不够的,还需要把历史记录里的文件移除:

git rm -r --cached node_modules

这条命令只把文件从 Git 跟踪里移除,不会删除你本地磁盘上的实际文件。执行之后再git commit、git push,远程仓库里的对应文件就被清掉了。

5.4 提交信息写错了怎么办

如果你刚刚git commit,还没有推送,可以修改最近一次提交信息:

git commit --amend -m "修改后的提交说明"

如果你已经推送了,修改提交信息之后需要强制推送:

git push --force-with-lease

注意:--force-with-lease比--force安全得多。它的意思是“只有当远程分支没有别人新提交时,才允许强制推送”,可以避免覆盖别人的工作。个人项目无所谓,协作项目一定要用带-with-lease的版本。

5.5 常见问题速查表

问题现象可能原因解决办法
fatal: not a git repository当前目录没有初始化 Git执行git init
fatal: 'origin' does not appear...没有添加远程仓库执行git remote add origin 地址
推送上去了但网页没看到文件推送的是另一个分支在 GitHub 网页切换分支,或者统一分支名
要求输入密码但不知道填什么HTTPS 认证需要 Token在 GitHub Settings 中生成 Personal Access Token
提示 Everything up-to-date本地没有新提交检查是否漏了git add和git commit
推送文件太多太慢误提交了大文件添加.gitignore并清理缓存

6. 实操心得与扩展技巧:从“能用”到“好用”的三个习惯

6.1 每次提交只做一件事

我见过太多人一次提交几十个文件,提交信息写“更新”,过了一个月自己都看不懂这版改了什么。好的习惯是:每次提交只针对一个功能点或一个修复,提交信息尽量具体,比如“修复登录页密码框无法聚焦的问题”。

这样做的好处,一是回滚版本时你能精准定位;二是如果某个提交引入了问题,代码审查能一眼发现。

6.2 推送前先看一眼 diff

而这其实是最重要的一个习惯。

git diff --stat

这条命令会简洁地显示这次改动涉及哪些文件、增删了多少行。推送之前花十秒看一遍,能帮你拦截掉很多低级错误,比如不小心把调试用的临时文件也提交进去了。

6.3 项目维护久了记得打标签

当你的项目发展到某个稳定版本,比如完成了第一个里程碑,可以给这个提交打个标签:

git tag v1.0 git push --tags

标签就像一个书签,标记着项目历史中某个特殊节点。以后你哪怕改得面目全非,随时都能通过标签找回当时那个版本。这个技巧在个人项目里很容易被忽略,但一旦用起来,你会发现特别好用。

7. 写在最后的个人建议

把代码推到 GitHub 这个操作,本质上是一个“技术门槛低但思维转变大”的过程。你可能会遇到各种报错,但大部分报错在搜索引擎里都能找到答案。切忌一报错就想着重装 Git、重新克隆仓库,先去读报错信息,它往往已经把原因写得很清楚了。

如果你今天跟着这篇文章操作了一遍,但中间出了差错,别灰心,把终端里报错的那几行复制下来,对着这篇文章的排查表格逐条对照。大部分人第一次推送都会卡在认证或者分支名上,你把这些坑踩一遍,后面就会顺很多。

我个人现在推送代码,早已不需要思考命令是什么,靠的是肌肉记忆。但每次看到终端输出main -> main的那一刻,心里还是会觉得踏实——代码有了第二个落脚点,不怕硬盘坏,不怕电脑丢。希望这篇文章也能让你体验到那种安心感。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询