从注册、装 Git、配置认证,到 clone、push、分支、Pull Request、参与开源——一篇讲透
由 网络精灵 整理 · 2026-08-16 · AI 导航原创指南 · 基于 GitHub 当前界面与规则
先记住一句话:Git 是工具,GitHub 是网站。它俩不是一回事,但必须配合。
你写文档、写代码,经常会有"改着改着发现还是上一版好"的情况。Git 就是专门帮你记录每一次修改、随时回到任意历史版本的工具。它装在你自己电脑上,不需要联网也能用。
通俗比喻:
commit(提交)一次,就像给当前文件夹拍了一张快照。GitHub 是一个网站(github.com),它帮你把 Git 记录的项目存到网上,还能让别人看到、一起改、给你提建议。
| 名词 | 英文 | 大白话解释 |
|---|---|---|
| 仓库 | Repository / Repo | 一个项目的文件夹,里面装着代码 + 修改历史 |
| 提交 | Commit | 给当前状态拍一张"快照",并写一句说明 |
| 分支 | Branch | 项目的"平行宇宙",在不影响主线的情况下试错 |
| 主分支 | main / master | 项目的"正片",默认分支(2020 年后新仓库叫 main) |
| 克隆 | Clone | 把网上的仓库整包下载到本地电脑 |
| 远程 | Remote | 网上那个仓库的"地址别名",默认叫 origin |
| 推送 | Push | 把本地的修改上传到 GitHub |
| 拉取 | Pull | 把 GitHub 上的最新修改下载到本地 |
github.com/你的用户名),建议正式一点,以后找工作人家会看。git --version,没装会提示你装"Command Line Tools";或 brew install git。sudo apt install gitgit --version
验证装好没:打开终端(Windows 用 Git Bash),输入
能显示版本号就成功了。
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@example.com"
Git 每次提交都要记录"谁改的"。首次使用先配置用户名和邮箱(用你注册 GitHub 的邮箱):
remote: Support for password authentication was removed on August 13, 2021.
重点:从 2021 年 8 月起,GitHub 彻底禁用了"密码登录 Git"。 你 push 时如果输入账号密码,一定会失败,报类似:
正确做法二选一:
my-laptop),Expiration 选个时长(90 天或自定义)。repo(控制仓库的全部权限)。ghp_xxxx... 的字符。立刻复制保存!离开页面就再也看不到了。git push 让你输密码时,密码那一栏粘贴这个 token(用户名还是你的 GitHub 用户名)。# 1. 生成密钥(一路回车,不设密码也行)
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
# 2. 把公钥内容复制出来
# Windows: cat ~/.ssh/id_ed25519.pub
# Mac/Linux: pbcopy < ~/.ssh/id_ed25519.pub (或手动打开文件复制)
配置一次后,以后 push 再也不用输任何东西。
然后把复制的内容,粘贴到 GitHub → Settings → SSH and GPG keys → New SSH key → 保存。
"仓库(Repository)"就是你的项目文件夹。第一次我们在网页上建:
+ 图标 → 选 New repository(新建仓库)。my-first-project。创建后你会看到一个文件列表页面,中间有个绿色的 < > Code 按钮——以后下载、复制地址都靠它。
在电脑上编辑文件比在网页上好用一万倍。把仓库"克隆"到本地:
https://github.com/你的用户名/my-first-project.git)。cd Desktop),然后:3. 会自动生成一个同名文件夹,进去:
```bash
cd my-first-project
git clone https://github.com/你的用户名/my-first-project.git
记住这三个动作,你就掌握了 90% 的日常使用。
先理解三个"区"的比喻:
流程就是:改文件 → add 挑出来 → commit 存档 → push 上传。
用记事本或任意编辑器,打开仓库里的 README.md,随便加一行字,保存。
git status
会显示"哪些文件被改了(红色)"。
git add README.md # 只挑这一个文件
# 或者把所有改动都挑出来:
git add . # 注意最后有个点,代表"当前目录全部改动"
git commit -m "更新了说明文档"
-m 后面跟的是这次改了什么的说明,一定要写清楚!以后回看历史就靠它。
git push origin main
origin = 你的 GitHub 仓库(远程地址的别名,默认就叫 origin)。main = 要上传到的分支名(默认主分支)。git push # 不用再写 origin main
第一次 push 加了 -u 绑定后,以后直接:
git log # 看提交历史(按 q 退出)
git log --oneline # 简洁版一行一条
git diff # 看"还没 add"的改动具体内容
git diff --staged # 看"已 add 但还没 commit"的改动
为什么需要分支? 假设你主线上是个能跑的项目,你想试个新功能,又怕改崩了。分支让你在"副本"上随便折腾,成功了再合并回主线,失败了直接扔掉,主线毫发无损。
git branch # 看当前有哪些分支(* 号在谁前面就是当前分支)
git switch -c 新功能名 # 创建并切换到新分支(如 git switch -c add-login)
# 旧版 Git 用:git checkout -b 新功能名
git switch main # 切回主分支
切到新分支后,照常改文件 → add → commit。这些改动只存在这个分支里,不影响 main。
git switch main # 先回到主线
git merge 新功能名 # 把分支的改动合并进来
功能在分支上做完了,要把它合回主线:
<<<<<<< HEAD
这是 main 上的内容
=======
这是分支上的内容
>>>>>>> 新功能名
如果 main 和你的分支改了同一行代码,Git 不知道听谁的,就会报冲突。文件里会出现这样的标记:
解决步骤:
<<<<<<<、=======、>>>>>>> 这些标记也删掉)。> 冲突不可怕,它就是 Git 在问你"这行听谁的",你选一个删掉标记就行。
---
## 九、Pull Request:团队协作的灵魂
**Pull Request(简称 PR)** = "我改好了,请审查并合并"。哪怕你一个人写项目,用 PR 也能留下清晰的修改记录。
完整流程:
1. 在**分支**上完成改动,并 `git push origin 分支名` 推到 GitHub。
2. 打开 GitHub 仓库页面,通常会弹出黄色提示:**"Your recently pushed branches" → Compare & pull request**,点它。
- 或点顶部 **Pull requests** 标签 → **New pull request**。
3. 左边选 `base: main`(要合入的分支),右边选 `compare: 你的分支`。
4. 写标题和说明(改了啥、为什么),点 **Create pull request**。
5. 队友/你自己审查 → 点 **Merge pull request** → **Confirm merge**。
6. 合并后可点 **Delete branch** 删掉这个分支(保持仓库干净)。
> 比喻:PR 就像"提交作业 + 请老师批改",改完没问题才"入库"。
---
## 十、参与开源:Fork 流程
想给别人的项目(比如一个知名开源库)做贡献,你没有直接修改权限,就要用 **Fork**:
1. 打开别人的仓库,点右上角 **Fork** → 会在**你自己的账号**下生成一份副本。
2. 把**你的副本** clone 到本地:
```bash
git clone https://github.com/你的用户名/那个项目.git
git add 冲突文件
git commit -m "解决冲突,合并分支"
4. 去你自己的仓库页面,点 **Contribute** → **Open pull request**,向原仓库提 PR。
5. 原仓库作者审查通过后合并,你的名字就出现在贡献者列表里了!✨
### 10.1 保持你的 Fork 和原仓库同步
原仓库更新了,你的 Fork 不会自动跟着变。加一个"上游"远程:
```bash
git remote add upstream https://github.com/原作者/原项目.git
git fetch upstream
git merge upstream/main # 把原仓库最新代码合进来
git switch -c fix-typo
# ...改文件...
git add .
git commit -m "修复了一个错别字"
git push origin fix-typo
git pull origin main
别人改了 main,你想把最新代码弄到本地:
好习惯:每次开始干活前,先 git pull 一下,避免和别人的改动"撞车"产生冲突。
# 例子:忽略所有 .log 文件和 node_modules 文件夹
*.log
node_modules/
有些文件不该进版本库:比如系统缓存、密码配置、编译产物。.gitignore 就是一张"黑名单",写进去的文件 Git 会自动忽略。
建仓库时勾了模板就会自动生成,一般不用手改。
# 项目名称
一句话介绍这个项目是干嘛的。
## 功能
- 功能一
- 功能二
## 安装
\`\`\`bash
git clone 地址
cd 项目
\`\`\`
## 使用
写清楚怎么跑起来。
## 许可证
MIT
这是别人点进你仓库第一个看到的文件,等于项目门面。推荐结构:
git remote set-url origin https://github.com/用户名/仓库.git
git restore 文件名 # 撤销"还没提交"的修改(Git 2.23+)
git checkout -- 文件名 # 旧版写法,效果同上
git log --oneline # 找到想回到的版本号(前 7 位)
git checkout 版本号 # 回到那个历史快照
git commit --amend -m "新的说明" # 改最近一次 commit 的说明
git config --global credential.helper store
Q1:push 时让我输密码,输了却失败?
→ 2021 年起不能用密码!密码那栏要填 Personal Access Token(见 2.4)。
Q2:报 Permission denied (publickey)?
→ 你用的是 SSH 地址,但没配 SSH 密钥。要么去配 SSH(2.4 方案 B),要么把远程地址换成 HTTPS:
Q3:冲突了怎么办?
→ 见第八章,手动改文件、删掉 <<< === >>> 标记、再 add + commit。
Q4:提交到错误的分支了?
→ 先 git switch 到正确的分支,再 git cherry-pick 提交号 把那次提交搬过去;或者简单点,在正确分支重做一遍。
Q5:误删了文件 / 改崩了,想回到上一版?
Q6:commit 的说明写错了能改吗?
Q7:main 和 master 到底用哪个?
→ 2020 年 10 月后 GitHub 新建仓库默认叫 main。老教程里写的 master 在新仓库上会报错"分支不存在",换成 main 即可。
Q8:每次 push 都要输 token,太烦?
→ 配 SSH(2.4 方案 B)一劳永逸;或让 Git 记住凭证:
(下次输一次 token 后会缓存,注意别在公共电脑上用)
Q9:git status 显示很多不认识的文件?
→ 多半是没写 .gitignore,把 node_modules、__pycache__、.idea 等加进忽略列表。
Q10:网页上能直接改文件吗?
→ 能。点开任意文件 → 右上角铅笔图标 → 改完点 Commit changes,适合改错别字等小改动,不用开电脑。
| 想做的事 | 命令 |
|---|---|
| 配置用户名/邮箱 | git config --global user.name "名" / git config --global user.email "邮箱" |
| 初始化本地仓库 | git init |
| 克隆远程仓库 | git clone 地址 |
| 看状态 | git status |
| 看历史 | git log --oneline |
| 添加改动到暂存区 | git add 文件名 或 git add . |
| 提交 | git commit -m "说明" |
| 推送 | git push origin main |
| 拉取 | git pull origin main |
| 建并切分支 | git switch -c 分支名 |
| 切分支 | git switch 分支名 |
| 看分支 | git branch |
| 合并分支 | git merge 分支名 |
| 看远程地址 | git remote -v |
| 撤销未提交修改 | git restore 文件名 |
| 改最近一次说明 | git commit --amend -m "新说明" |
用户名.github.io 就是专属域名。good first issue 或 help wanted,专给新手准备的入门任务。good first issue 开始,走一遍 Fork → 改 → PR 流程,攒贡献绿点。pull → 改 → add → commit → push,协作就靠分支 + Pull Request。 多练几次,肌肉记忆就有了。