Git 与 GitHub 版本控制
开发工具 Git GitHub一、版本控制概念
1.1 什么是版本控制
版本控制 = 为代码创建 存档点(Save Points),可以随时回溯。
版本 1: 写了几行代码 → 保存 ✓
版本 2: 又写了几行 → 保存 ✓
版本 3: 搞砸了一切 → 回滚到版本 2 ✓核心能力:
- 🔄 对比 — 查看当前代码与任何历史版本的差异
- ⏪ 回滚 — 回到任意历史版本
- 📊 追踪 — 记录每次修改的时间、作者和内容
二、Git 本地操作
2.1 三个区域
工作目录 ──git add──→ 暂存区 ──git commit──→ 本地仓库
(Working Dir) (Staging Area) (Local Repo)| 区域 | 说明 |
|---|---|
| 工作目录 | 你正在编辑的文件所在目录(git init 所在位置) |
| 暂存区 | 中间站,选择哪些文件参与本次提交 |
| 本地仓库 | 正式保存的版本历史(.git/ 目录) |
💡 为什么需要暂存区? 你可能不想一次提交所有修改。暂存区让你挑选需要提交的文件。
2.2 核心命令
bash
# 初始化 Git 仓库
git init
# 查看状态(红色=未暂存,绿色=已暂存)
git status
# 添加到暂存区
git add chapter1.txt # 单个文件
git add . # 当前目录所有文件
# 提交到本地仓库(提交信息用现在时态)
git commit -m "Complete chapter one"
# 查看提交历史
git log2.3 对比与回滚
bash
# 查看文件与上次提交的差异
git diff chapter3.txt
# 红色(-) = 被删除的内容
# 绿色(+) = 新增的内容
# 回滚到上次提交的版本
git checkout chapter3.txt2.4 撤销暂存
bash
# 移除暂存区的所有文件
git rm --cached -r .三、GitHub 远程仓库
3.1 本地 → 远程
bash
# 1. 在 GitHub 创建新仓库(不初始化 README)
# 2. 添加远程仓库(origin 是约定名称)
git remote add origin https://github.com/username/repo.git
# 3. 推送到远程
git push -u origin main
# -u 标志:将本地 main 与远程 origin/main 关联3.2 工作流概览
工作目录 → 暂存区 → 本地仓库 ──git push──→ 远程仓库 (GitHub)
↑
git clone/pull四、.gitignore
4.1 为什么需要
| 应忽略的文件 | 原因 |
|---|---|
| API 密钥 / 密码 | 安全风险!上传到 GitHub 会泄露 |
| node_modules/ | 太大,可通过 npm install 重建 |
| .DS_Store | macOS 系统文件,对他人无用 |
| 环境配置文件 | .env 等包含敏感信息 |
4.2 创建 .gitignore
bash
touch .gitignoregitignore
# 注释以 # 开头
# 忽略特定文件
.DS_Store
secrets.txt
# 忽略整个目录
node_modules/
# 通配符 — 忽略所有 .log 文件
*.log
# 忽略环境文件
.env4.3 Node.js 推荐模板
GitHub 提供预制模板:github.com/github/gitignore → Node.gitignore
gitignore
# Dependencies
node_modules/
# Environment
.env
.env.local
# OS
.DS_Store
Thumbs.db
# IDE
.vscode/
.idea/五、Git Clone(克隆)
5.1 概念
克隆 = 将远程仓库 完整复制 到本地(包括所有提交历史)。
bash
git clone https://github.com/user/repo.git5.2 克隆后的工作流
bash
git clone <URL> # 下载整个仓库
cd repo-name # 进入项目目录
npm install # 安装依赖(Node 项目)
npm start # 运行项目5.3 克隆的意义
- 获取他人的开源项目代码
- 在本地自定义和修改
- 学习他人的代码风格和架构
- 贡献开源项目的第一步
六、分支与合并(Branch & Merge)
6.1 概念
main: C1 ─── C2 ─── C4 ────── M (merge) ───→
\ /
alien-plot: └── C3 ──────┘分支让你可以 并行开发,不影响主分支。
6.2 分支操作
bash
# 创建新分支
git branch alien-plot
# 查看所有分支(* 标记当前分支)
git branch
# 切换分支
git checkout alien-plot
# 在分支上正常操作
git add .
git commit -m "Add alien theme to chapter 1 and 2"
# 切回主分支
git checkout main6.3 合并分支
bash
# 先切到目标分支(主分支)
git checkout main
# 合并其他分支到当前分支
git merge alien-plot
# Vim 打开 → 输入 :q! 保存退出
# 推送到远程
git push -u origin main6.4 分支使用场景
| 场景 | 说明 |
|---|---|
| 新功能 | 在独立分支开发,完成后合并 |
| Bug 修复 | 不影响正在开发的功能 |
| 实验 | 尝试新想法,失败可以丢弃分支 |
七、Fork 与 Pull Request
7.1 Fork vs Clone
| 操作 | Fork | Clone |
|---|---|---|
| 位置 | GitHub → GitHub(你的账户) | GitHub → 本地电脑 |
| 用途 | 贡献他人项目 | 本地开发 |
| 权限 | 你拥有 Fork 副本的完整权限 | 遵循原仓库权限 |
7.2 开源协作流程
1. Fork 他人仓库 → 你的 GitHub 账户下有一份副本
2. Clone 你的 Fork 到本地
3. 修改代码、提交
4. Push 到你的 Fork(远程)
5. 创建 Pull Request → 请求原仓库合并你的修改
6. 原作者 Code Review → 批准 → Merge7.3 Pull Request(PR)
- 不叫 Push Request,因为你没有原仓库的写入权限
- 是 "请求原作者拉取你的修改" 的意思
- 原作者可以审查代码、留下评论、要求修改、最终批准合并
7.4 为开源做贡献
GitHub 有专门为初学者准备的开源项目列表:
- awesome-for-beginners — 适合第一次贡献的项目
八、Git 命令速查表
| 命令 | 功能 |
|---|---|
git init | 初始化仓库 |
git status | 查看当前状态 |
git add <file> | 添加到暂存区 |
git add . | 添加所有文件 |
git commit -m "msg" | 提交(现在时态) |
git log | 查看提交历史 |
git diff <file> | 查看文件差异 |
git checkout <file> | 回滚文件到上次提交 |
git remote add origin <URL> | 添加远程仓库 |
git push -u origin main | 推送到远程 |
git clone <URL> | 克隆远程仓库 |
git branch <name> | 创建分支 |
git branch | 查看所有分支 |
git checkout <branch> | 切换分支 |
git merge <branch> | 合并分支 |
git rm --cached -r . | 撤销暂存 |