Skip to content

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 log

2.3 对比与回滚

bash
# 查看文件与上次提交的差异
git diff chapter3.txt
# 红色(-) = 被删除的内容
# 绿色(+) = 新增的内容

# 回滚到上次提交的版本
git checkout chapter3.txt

2.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_StoremacOS 系统文件,对他人无用
环境配置文件.env 等包含敏感信息

4.2 创建 .gitignore

bash
touch .gitignore
gitignore
# 注释以 # 开头

# 忽略特定文件
.DS_Store
secrets.txt

# 忽略整个目录
node_modules/

# 通配符 — 忽略所有 .log 文件
*.log

# 忽略环境文件
.env

4.3 Node.js 推荐模板

GitHub 提供预制模板:github.com/github/gitignoreNode.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.git

5.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 main

6.3 合并分支

bash
# 先切到目标分支(主分支)
git checkout main

# 合并其他分支到当前分支
git merge alien-plot
# Vim 打开 → 输入 :q! 保存退出

# 推送到远程
git push -u origin main

6.4 分支使用场景

场景说明
新功能在独立分支开发,完成后合并
Bug 修复不影响正在开发的功能
实验尝试新想法,失败可以丢弃分支

七、Fork 与 Pull Request

7.1 Fork vs Clone

操作ForkClone
位置GitHub → GitHub(你的账户)GitHub → 本地电脑
用途贡献他人项目本地开发
权限你拥有 Fork 副本的完整权限遵循原仓库权限

7.2 开源协作流程

1. Fork 他人仓库 → 你的 GitHub 账户下有一份副本
2. Clone 你的 Fork 到本地
3. 修改代码、提交
4. Push 到你的 Fork(远程)
5. 创建 Pull Request → 请求原仓库合并你的修改
6. 原作者 Code Review → 批准 → Merge

7.3 Pull Request(PR)

  • 不叫 Push Request,因为你没有原仓库的写入权限
  • "请求原作者拉取你的修改" 的意思
  • 原作者可以审查代码、留下评论、要求修改、最终批准合并

7.4 为开源做贡献

GitHub 有专门为初学者准备的开源项目列表:


八、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 .撤销暂存

← 返回 Web 开发研究