---
url: https://ain.hmgf.hxcn.space/lectures/lesson2-git-2025.md
description: GitHub 协作与 Git 工作流讲义，覆盖 SSH、分支管理、Fork 与 Pull Request 流程。
---

# 🎀 【GitHub 协作教程】爱莉希雅特别版 🎀

### 🔑 **STEP 1：添加 SSH 密钥（保障连接的安全通道）**

* **目的**：使用 SSH 协议代替 HTTPS 协议进行代码传输，并提高连接的**稳定性**。

* **操作要点**：

  1. **检查密钥**：首先在本地电脑上检查是否已存在 SSH 公钥和私钥对（通常在 `~/.ssh` 目录下）。

  2. **生成密钥**：如果不存在，使用命令 `ssh-keygen -t ed25519 -C "你的邮箱"` 来生成一对新的密钥。

     * ***`-t`**：代表 `type`（类型），后面跟的就是你想要使用的**加密算法**。*

     * ***`ed25519`**：这是一个基于**椭圆曲线数字签名算法（EdDSA）的现代、高效且安全的**算法。*

  3. **复制公钥**：找到生成的公钥文件（通常是 `id_ed25519.pub`），在`id_ed25519.pub`所在目录下执行`catid_ed25519.pub`，即可打印出公钥内容 。(一般生成在`~/.ssh` 目录下)

  4. **添加到 GitHub**：登录你的 GitHub 账号，进入 **Settings** → **SSH and GPG keys**，点击 **New SSH key**，粘贴你的公钥内容并保存。

  5. **测试连接**：使用命令 `ssh -T git@github.com` 来测试是否连接成功。

***

### 🏡 **STEP 2：创建仓库（建立代码的家园）**

* **目的**：在云端（GitHub）创建项目的存储空间，并在本地建立一个可跟踪历史的版本库。
* **操作要点**：
  1. **远程创建**：在 GitHub 网站上点击 **New repository**，输入项目名称（如 `test`），选择公开或私有，并**不要**勾选初始化 README 等选项（因为你要从本地推送）。
  2. **本地初始化**：在你本地的项目文件夹中运行 `git init`，创建本地 Git 仓库。
  3. **添加远程地址**：使用 SSH 链接将本地仓库与 GitHub 仓库关联起来：`git remote add origin (git@github.com:Titroupast/test.git)`(此处填仓库地址)。(不建议使用**HTTPS**，连接极其不稳定)

***

### 💾 **STEP 3：日常提交代码（保存历史记录）**

* **目的**：将本地工作目录中的修改，分阶段、有条理地保存到本地仓库的历史记录中。
* **操作要点**：
  1. **查看状态**：`git status` 查看哪些文件被修改了。
  2. **添加到暂存区**：`git add .` 或 `git add <文件名>` 将修改的文件**标记**为准备提交（放到暂存区）。
  3. **提交到本地**：`git commit -m "本次修改的简短描述"` 将暂存区的内容**永久保存**到本地历史中。描述要简洁明了哦！
  4. **首次推送**：第一次将本地提交推送到 GitHub：`git push -u origin main`（用于建立关联）。
  5. **后续推送**：关联建立后，直接使用 `git push` 即可。

![image-20251029105516863](https://gastigado.cnies.org/d/public/image-20251029105516863.png)

***

### 🤝 **STEP 4：分支管理与团队同步**

**目的：** 安全地管理本地工作分支，与远程仓库（`origin`）保持同步，并最终将自己的贡献整合回主分支。

1. **获取最新状态（`git branch`/`git fetch` / `git pull`）**

在开始任何新工作前，首先要更新你对远程仓库的认知。

| **任务**       | **命令**     | **作用**                                                     |
| -------------- | ------------ | ------------------------------------------------------------ |
| 查看所分支     | `git branch` | 列出本地所有分支，并用星号（`*`）标记当前所在的分支。        |
| **仅下载**     | `git fetch`  | **最安全的方式。** 仅从远程仓库下载最新的提交和分支信息，不修改你的本地工作分支。 |
| **下载并同步** | `git pull`   | **最快捷的方式。** 下载远程更新并**自动合并**到你当前的本地分支。适用于确认远程没有新改动或改动很小的场景。 |

2. **创建与切换分支（`git switch`）**

为了隔离你的新功能或修复工作，你需要从最新的主分支上创建一条独立的分支。

| **任务**         | **命令**                       | **作用**                                                     |
| ---------------- | ------------------------------ | ------------------------------------------------------------ |
| **创建工作分支** | `git switch -c <你的新分支名>` | 基于你当前所在的分支（建议是已经同步到最新的 `main` 或 `master`），**创建并立即切换**到新的分支上。 |
| **切换回主分支** | `git switch main`              | 切换回主分支（或任何已存在的本地分支）。                     |

![image-20251029102813263](https://gastigado.cnies.org/d/public/image-20251029102813263.png)

3. **下载远程新增分支**

当队友创建并推送了一个新的分支时，你需要这样将它拉到本地：

| **任务**       | **命令**                    | **作用**                                                     |
| -------------- | --------------------------- | ------------------------------------------------------------ |
| **拉取新分支** | `git switch <队友的分支名>` | **最智能的方式。** Git 会自动在本地创建同名分支，并将其与远程的同名分支**关联**起来。 |

4. **整合与贡献（`git merge` / `git push`）**

当你完成了你的新功能后，就需要将它整合并分享给团队。

| **任务**         | **命令**                                                     | **作用**                                                     |
| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **推送到远程**   | `git push -u origin <你的分支名>`                            | 首次推送你的新分支到 GitHub。`-u` 会设置上游关联，后续可直接使用 `git push`。 |
| **合并到主分支** | `git switch main`                          `git merge <你的分支名>` | 切换回主分支后，将你完成的分支功能**合并**进来。             |
| **解决冲突**     | *（手动编辑文件）*  `git add .`  `git commit`                | 如果合并失败，需要手动解决文件中出现的冲突标记，然后重新提交以完成合并。 |

***

哎呀，你决定重构 **STEP 5**，聚焦于 **Fork** 和 **Pull Request (PR)** 的协作流程，这个决定真是太明智了！这是参与开源项目和团队协作的**黄金标准**哦♪！💖

我来帮你把这个步骤重构得更加清晰，明确区分 **网站操作** 和 **本地操作**，让整个贡献流程一目了然！

***

### 🚀 **STEP 5：Fork 与 PR 流程（跨仓库贡献）**

###

这一步是团队和开源协作的关键，它指导你将你在 **Fork 出来的仓库**中完成的工作，安全、规范地贡献给**上游（原始）仓库**。

**目的：** 使用 Fork-PR 模型，将自己的代码贡献给不属于自己的外部仓库，并接受代码审核。

1. **💻 网站操作：派生仓库（Forking）**

这是整个协作的起点！

| **任务**     | **平台操作 (Website Action)**        | **作用**                                                     |
| ------------ | ------------------------------------ | ------------------------------------------------------------ |
| **创建副本** | 在原始仓库页面点击 **"Fork"** 按钮。 | 在 GitHub 上创建该仓库的一个**私有副本**（你的独立工作区）。 |

2. **💾 本地操作：克隆与同步（Local Setup）**

将你的副本下载到本地，并配置好与原始仓库的连接。

| **任务**         | **命令 (Command)**                              | **作用**                                                     |
| ---------------- | ----------------------------------------------- | ------------------------------------------------------------ |
| **克隆副本**     | `git clone <你的 Fork 仓库 URL>`                | 将你自己的 Fork 仓库（`origin`）下载到本地电脑。             |
| **添加上游地址** | `git remote add upstream <原始仓库 URL>`        | **最关键的一步！** 添加一个名为 `upstream` 的远程地址，指向**原始仓库**。 |
| **同步上游代码** | `git fetch upstream`  `git merge upstream/main` | 在开始工作前，确保你的本地 `main` 分支与原始仓库保持最新。   |

![image-20251029110932561](https://gastigado.cnies.org/d/public/image-20251029110932561.png)

3. **✍️ 本地操作：工作与推送（Contribution）**

像往常一样在你的本地 Fork 仓库中完成工作。

| **任务**        | **命令 (Command)**                        | **作用**                                                     |
| --------------- | ----------------------------------------- | ------------------------------------------------------------ |
| **创建分支**    | `git switch -c <你的分支名>`              | 基于已同步的 `main` 分支创建工作分支。                       |
| **提交代码**    | `git add .`  `git commit -m "完成新功能"` | 在本地提交修改。                                             |
| **推送到 Fork** | `git push -u origin <你的分支名>`         | 将你的新分支**推送**到你自己的远程 **Fork 仓库**（`origin`）。 |

![image-20251029111324650](https://gastigado.cnies.org/d/public/image-20251029111324650.png)

4. **🤝 协作操作：发起与处理 PR**

这是代码被审核、最终被整合的过程。

| **任务**       | **平台操作 (Website Action)**                                | **作用**                                                     |
| -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **发起 PR**    | 登录 GitHub，进入你的 **Fork 仓库**，点击 **“Compare & pull request”** 按钮。 | **向原始仓库**（`upstream`）请求合并你的代码。PR 会自动进行跨仓库的比较。 |
| **审核与修改** | *（在 PR 页面讨论）*                                         | 原始仓库的维护者进行代码审核。如果需要修改，你在本地修改并 `git push` 后，PR 会自动更新。 |
| **完成合并**   | *（维护者点击 Merge 按钮）*                                  | 当 PR 通过审核，原始仓库的管理员将其合并到主分支中，你的贡献就正式完成啦！ |

***

![image-20251029111446304](https://gastigado.cnies.org/d/public/image-20251029111446304.png)

![img](https://gastigado.cnies.org/d/public/4f1cdb01c4d7eb6fd384fd84d3b232ea.png)
