第 01 章

Git 速通与首次推送

从本地一行 commit 到把代码送上 GitHub——建立「本地 ↔ 远程」的心智模型

五分钟内,让你的项目出现在 github.com 上

代码只在本地

你的项目跑得挺好,但它只活在你这台电脑上

换台电脑就没了

你在宿舍写完作业,第二天去机房想接着干——代码不在那台机器上。U 盘拷来拷去,版本乱了套。

没法给别人看

老师让你交一个「项目链接」,你只能把文件夹打包成 zip 发邮件。没有历史,没有结构,也不专业。

不知道怎么传上去

你注册了 GitHub,点 New repository 卡住了——SSH 是什么?PAT 又是什么?认证这一关就把人劝退。

本章目标很单纯:把本地已有代码,一次性推送到 GitHub。
Git 的基本操作(你已会)快速过,重点解决「怎么连上远程」和「认证怎么配」。

开始之前

适合谁

  • 已经在本地用过 git add / git commit,但没往远程推过
  • 注册了 GitHub 账号,却不知道下一步该干嘛
  • 被 SSH key、PAT、remote 这些词绕晕了的人

你将学会

  • 用两条命令把本地仓库连上 GitHub
  • 在 SSH key 和 PAT 之间做选择并配置好
  • 完成第一次 git push
  • 看懂 push 失败的常见报错并修复

本章暂不覆盖

  • 分支与合并(第 03 章 Pull Request)
  • clone 别人的仓库(第 02 章)
  • 团队协作工作流(第 05 章)

两个仓库

理解 Git 的核心:本地仓库与远程仓库是两份独立的副本

图:本地仓库与远程仓库的关系
关键认知:你每次 git commit,改动只存在本地。git push 才是把本地的提交同步到 GitHub。
所以——commit 了但没 push,换台电脑一样看不到。这是新手最常踩的坑。

Git 三件套

你已经会了,这里只做 30 秒回顾,对齐术语

命令作用大白话
git init 初始化仓库 在这个文件夹里开启 Git 管理,生成隐藏的 .git
git add 把改动加入暂存区 把要提交的文件「装进盒子」
git commit 创建一次提交 把盒子封口、贴标签,存进本地历史
$ git init
$ git add .
$ git commit -m "第一次提交"
本章假设你已熟练以上三步。如果还生疏,先在本地多练几次——远程操作只是把「已 commit 的东西」同步上去。

在 GitHub 建仓库

登录 github.com,右上角 + → New repository

必填项

  • Repository name:用小写英文+连字符,如 my-first-project
  • Public / Private:Public 任何人可见,Private 只有你和协作者

先不要勾这些

  • ❌ Add a README file
  • ❌ Add .gitignore
  • ❌ Choose a license

因为你的本地仓库已经有内容了。勾选这些会在远程生成初始提交,导致首次 push 时历史冲突。空仓库最好对接。

常见踩坑:建仓库时勾了 README,结果 push 报 failed to push some refs。新手在这里卡很久。记住:本地有内容,远程就留空。

拿到仓库地址

建好后,GitHub 会给你一个地址,长这样

HTTPS 地址

https://github.com/用户名/仓库名.git

用 PAT(个人访问令牌)认证。新手友好,跨平台无配置。

SSH 地址

git@github.com:用户名/仓库名.git

用 SSH key 认证。配好后免密,长期最省心。

在哪找:仓库页面绿色的 Code 按钮 → 弹出框顶部两个标签 HTTPS / SSH 切换 → 右侧复制按钮。
把地址记下来,下一步要用。

认证二选一

GitHub 早就不允许密码推送了,必须用 PAT 或 SSH key

方式配置难度日常体验推荐场景
PAT (HTTPS) 简单,网页生成 首次要粘贴令牌 新手、临时用、多机器
SSH key 中等,命令行生成 一次配好永久免密 长期主力开发
给新手的建议:第一次先用 PAT 把流程跑通,体验完整的 push。
等你确定会长期用 Git,再花十分钟配 SSH key(第 10 章安全实践会系统讲)。

生成 PAT

Personal Access Token,本质是一串代替密码的令牌

在哪生成

GitHub 右上角头像 → Settings → 左侧最下方 Developer settings → Personal access tokens → Tokens (classic) → Generate new token (classic)

关键设置

  • Note:写用途,如「我的笔记本」
  • Expiration:选 90 天或自定义
  • Scopes:勾选 repo(完整仓库读写)
令牌只显示一次!生成后立刻复制保存到密码管理器。关掉页面就再也看不到,只能重新生成。
不要把令牌写进代码或截图发给别人——它等同于你的密码。

关联并推送

在本地仓库目录下,依次执行这三步

# 1. 关联远程仓库(把 GitHub 地址记作 origin)
$ git remote add origin https://github.com/用户名/仓库名.git

# 2. 重命名默认分支为 main(GitHub 现在默认用 main)
$ git branch -M main

# 3. 首次推送,-u 把本地 main 和远程 main 绑定
$ git push -u origin main
第一次 push 会弹出认证窗口(Git Credential Manager)。输入用户名,密码栏粘贴刚才的 PAT,不是 GitHub 登录密码。
认证通过后,凭证会被系统记住,之后 push 不用再输。

在 GitHub 上确认

刷新仓库页面,你的文件应该出现了

检查清单

  • 文件列表与本地一致
  • 能看到刚才的 commit 消息和时间
  • 分支名显示为 main

后续推送简化

因为 -u 已经绑定了上游,之后提交只需:

$ git add .
$ git commit -m "改动说明"
$ git push

不用再写 origin main。

恭喜!你已经完成了 Git 学习曲线里最陡的那一段——远程对接。剩下的都是在此基础上的扩展。

排错:认证失败

推送时报 Authentication failed 或 403

原因一:用了登录密码

GitHub 2021 年起禁止密码推送。修复:改用 PAT 粘贴到密码栏。

原因二:PAT scope 不够

生成时没勾 repo。修复:重新生成令牌,勾上 repo 全选。

原因三:令牌过期

有过期时间的令牌到期了。修复:重新生成并更新系统凭证。

清掉旧凭证重输:Windows 在「凭据管理器」→ Windows 凭据 → 找到 git:https://github.com 删除;macOS 用 git credential-osxkeychain erase。下次 push 会重新弹出认证窗口。

排错:被拒推送

报 non-fast-forward 或 rejected

典型原因

远程有你本地没有的提交——最常见是建仓库时勾了 README,远程多了一个初始 commit。

Git 出于安全,拒绝你的 push,怕覆盖别人的工作。

修复方法

先把远程的拉下来合并,再 push:

$ git pull origin main --allow-unrelated-histories
$ git push

--allow-unrelated-histories 允许合并两条没有共同起点的历史。

预防:本地有内容时,建远程仓库不要勾任何初始化文件。这是第 06 张幻灯片强调过的——养成习惯就不会再遇到这个错。

SSH 免密方案

如果你打算长期用 Git,花十分钟配一次,之后永久免密

# 1. 生成密钥对(一路回车用默认值)
$ ssh-keygen -t ed25519 -C "你的邮箱@example.com"

# 2. 复制公钥内容
$ cat ~/.ssh/id_ed25519.pub

# 3. 到 GitHub → Settings → SSH and GPG keys → New SSH key 粘贴

# 4. 测试连接
$ ssh -T git@github.com
切换已有仓库到 SSH:把 remote 地址改成 SSH 形式即可:
git remote set-url origin git@github.com:用户名/仓库名.git
之后 push/pull 全部走 SSH,不再需要 PAT。

两种方式怎么选

不存在谁更高级,只看你的使用场景

场景推荐理由
第一次跑通流程 PAT 网页点几下就能用,不用碰命令行
自己长期开发 SSH 一次配置,多台机器复用,最省心
在别人电脑临时用 PAT 用完可在 GitHub 一键撤销令牌
CI/CD 自动化 PAT 或 deploy key 令牌可限定权限和有效期

两种方式可以随时切换,不冲突。详细的安全考量见第 10 章。

动手试一试

把一个本地小项目推上 GitHub

你的任务

任务:在本地建一个文件夹,写一个 hello.txt,把它推送到 GitHub 上的新仓库。

要求:

  1. 本地 git init 并完成首次 commit
  2. 在 GitHub 建空仓库(不勾 README)
  3. 用 PAT 或 SSH 完成首次 push
  4. 刷新 GitHub 页面确认文件出现

提示

  1. 忘了命令?回头看第 10 张幻灯片的三步
  2. 认证失败?回第 12 张幻灯片对照排查
第 01 章

小结

你已经把本地代码推上了 GitHub——最难的第一步跨过去了

本章要点

  • 本地仓库与远程仓库是两份副本,commit 在本地,push 才同步
  • 认证二选一:PAT(新手友好)或 SSH key(长期省心)
  • 首次推送三步:remote add → branch -M main → push -u
  • 本地有内容时,远程仓库留空,避免历史冲突
下一步:第 02 章 远程仓库日常 —— 学会 clone 别人的项目、pull 同步更新、在网页上看历史。