Git+Github核心概念大串讲,从零到一全攻略,详细实战教程
By 技术爬爬虾 TechShrimp
Summary
Topics Covered
- AI协作的提交节拍:小步提交随时回滚
- Git后悔药决策图:Discard/Reset/Revert何时用
- 得意忘言:AI时代只需理解Git概念
- Work Tree:多AI Agent并行的隔离沙盒
- Rebase暗坑:强制推送会覆盖同事代码
Full Transcript
Git 与 GitHub 已经 成为 了 AA 时代 必学 必会 的 基本功 之一 了 很多 AA agent 的 核心 功能 都
是 直接 围绕 着 Git 来 运行 的 好消息 是 在 AA 时代 我们 不再 需要 死机 应备 一大堆 Git
命令 只 需要 掌握 Git 和 GitHub 的 几个 核心 概念 就 可以 直接 用 自然语言 指挥 AA 完成 各种
操作 本期 视频 带来 一个 Git 与 GitHub 核心 概念 大 串讲 我会 使用 动画 讲解 结合
实战 演示 的 方式 把 所有 的 核心 概念 一次 讲清楚 我们 先 从 从 本地 Git 仓库 开始 介绍 提交
分支 分区 等 核心 概念 然后 引入 远端 仓库 详细 介绍 Github 网站 的 基础 用法 包括 怎么 在
Github 中 进行 多人 协作 相信 看 完 这 一期 你 就 能 快速 掌握 AA 时代 所 需要 的 Git 与 Github
的 相关 知识 话 不 多 说 我们 直接 进入 第一个 章节 我们 先 把 Github 这个 名字 拆开 就是 Git
加 Hub 两个 单词 我们 先看 左 半边 的 Git Git 是 一个 开源 免费 的 软件 , 它 的 功能 是 版本控制
各位 上学 写 论文 的 时候 一定 有 这样 的 经历 论文 写 了 第一版 第二 版 , 第三版 定稿 版 , 最终版
打死 不改 最终版 我们 小心翼翼 的 保存 好 论文 的 每个 版本 就是 为了 应对 各种 突发 情况 比如 某
一天 你 突然 需要 找回 论文 的 某个 历史 版本 的 某个 段落 我们 就 可以 很 容易 的 从 历史 文件 把 它 找
回来 这个 保存 了 多个 历史 版本 的 操作 就是 最 原始 的 版本控制 不过 这是 一种 纯 人工 的 方式 想象
一下 如果 一个 项目 里面 有 成千上万 的 文件 又 有 成百上千 的 人 对 这些 文件 进行 协同 开发 版本控制
会 变成 一个 极其 复杂 的 工作 纯 人工 的 方式 肯定 无法 负担 这些 操作 为了 解决 版本控制 的 难题
Git 诞生 了 事实上 Git 是 世界 上 最多人 使用 的 版本 控制系统 当 一个 文件夹 被 Git 管理 起来
以后 就 变成 了 一个 Git 仓库 被 Git 仓库 管理 的 文件夹 下面 会 生成 一个 .
Git 的 子 文件夹 用来 存放 Git 的 版本控制 信息 Git 使用 Commit 也 就是 提交 作为 版本控制
的 基本 单元 每 完成 一次 Commit , Git 都 保存 了 一个 仓库 此时 状态 的 快照 文件夹 里 所有 文件 的
状态 都 被 记录 了 下来 随着 Commit 的 越来越 多 , 会 形成 一条 Commit 的 历史 链路 这样 整个 仓库 都
是 可 回溯 可以 查看 历史 的 每个 项目 参与者 的 每 一次 改动 都 会 被 这个 commit 链路 记录下来
Git 的 仓库 分成 两种 分别 是 local repo sitory 本地 仓库 还有 remote repo sitory 远端 仓库
本地 仓库 指 的 是 运行 在 你 自己 电脑 上 的 Git 仓库 如果 你 想 把 本地 仓库 在 远端 服务器上进行 一个
备份 或者 想 跟 其他人 分享 你 的 代码 就 可以 把 本地 仓库 上 传到 服务器 上面 这样 就 拥有 了 远端 仓库 ,
我们 可以 自己 购买 服务器 自行 搭建 远端 仓库 当然 也 可以 使用 别人 搭建 好 的 远端 仓库
Github 就是 这样 一个 免费 提供 远端 仓库 的 网站 当然 除了 Github 以外 还有 其他 类型 的
远端 仓库 的 服务 比如 GitLab , Bitb ucket 等等 如果 你 学会 了 Github 也 可以 很 轻松 的 使用 另外
两个 服务 我们 还是 回到 Github 这个 名字 , 我们 来看 右 半边 Hub 的 意思 是 中心 汇聚 集合
全世界 的 很多 开发者 会 把 自己 用 Git 进行 版本控制 的 仓库 也 就是 一个个 的 项目 文件夹 上 传到 Github 网站
上面 这个 网站 就 变成 了 Git 仓库 的 集合 也 就是 Hub 所以 Git 加 Hub 就是 Github 它 是
全球 最大 的 代码 仓库 托管 与 协作 平台 可以 在 里面 存储 分享 并且 与 他人 一起 编写 代码
Github 上面 的 仓库 分成 两种 公开 仓库 还有 私有 仓库 所有 的 公开 仓库 在 Github 上面 都 可以 被
搜索 到 而且 这些 公开 仓库 都 是 开放 原代码 了 所有人 都 可以 进去 直接 浏览 学习 其中 的 代码
并且 根据 一定 的 规则 使用 这些 代码 比如 大名鼎鼎 的 Linux 操作系统 Python 的 C语言 解释器
Cpyt hon 还有 NGX 等等 都 是 托管 在 Github 上面 的 开源 项目 所以 开源 是 计算机科学 的 基石 与 硅宝
在 开始 之前 我们 需要 在 电脑 上 进行 一些 准备 工作 也 就是 在 电脑 上 安装 Git vs Code 还有 要
配置 至少 一个 AEag ent 我们 还 需要 注册 并且 登陆 GitHub 网站 在 我 之前 的 视频 从零开始 用 国内
网络 跑通 一切 AEag ent 里面 有 详细 的 步骤 介绍 我们 先 来 安装 Git 这里 我们 先看 Wind
ows 电脑 我们 来到 Git 的 官网 点击 下载 Wind ows 系统 的 安装包 然后 选择 自己 的 CPU
架构 Wind ows 系统 一般 是 X86 64 位 的 下载 并且 打开 我们 来看 Mac 电脑 安装 Git
在 应用程序 里面 找到 终端 然后 输入 这个 命令 Xcode 横杠 select 空格 两个 横杠 inst
all 来 安装 Mac 系统 的 命令行 工具包 接下来 会弹 出 一个 确认 窗口 我们 点击 同意 Mac 系统 的
命令行 工具包 包含 许多 开箱 即用 的 工具 其中 就 包含 Git 我们 可以 输入 命令 Git 两个
横杠 vers ion 这里 成功 打印 出 版本号 就 安装 完成 了 下 一步 我们 来 安装 VScode 我们 来到 VS
Code 的 官网 这里 会 根据 你 的 操作系统 提供 对应 的 安装包 比如 wind ows 系统 的 我 把 安装包 下载
下来 一路 点击 下 一步 完成 安装 接下来 我们 注册 一个 Github 账号 如果 我们 访问 Github
遇到 网络 问题 可以 参考 之前 的 这期 视频 如果 没有 Github 账号 的话 可以 在 右上角 点击
SUNUP 先 注册 一个 填写 一个 用户名 邮箱 密码 然后 点击 注册 接下来 我们 去 邮箱 收 一下 验证码
把 验证码 填写 过来 这样 我们 就 登陆 进 了 Github 接下来 我们 配置 一个 AI - agent 软件
一般 使用 Codex 或者 Cloud Code 在 之前 的 这期 视频 也 有 过 详细 介绍 接下来 的 一个 步骤 非常
重要 就是 先 让 AIA 帮 我们 完成 Git 与 Github 的 绑定 这里 我以 Codex 为例 我 先 建立 一个
空白 的 文件夹 然后 我们 进入 Codex 点击 进入 项目 目录 使用 现有 文件夹 选择 我们 刚才
新建 的 文件夹 输入 提示 词 把 这个 文件夹 初始化 成 Git 项目 并且 推送 到 Github 上面 这里 AIA
要求 我们 提供 一个 远端 仓库 的 地址 我们 来到 Github 网站 点击 这个 New 按钮 也 就是 在
GitHub 上面 创建 一个 Repo sitory 存储 库 然后 填写 一个 存储 库 的 名字 接下来 点击 创建 然后
我们 把 存储 库 的 地址 复制 一下 粘贴 给 Codex 接下来 弹出 了 一个 授权 窗口 我们 点击 蓝色 按钮 先
登陆 GitHub 完成 授权 最后 任务 就 完成 了 我们 就 完成 了 Git 与 GitHub 的 绑定 准备 工作 完成
以后 我们 来看 Git 的 第一个 概念 init 就是 初始化 的 意思 把 一个 文件夹 进行 git init
就是 把 这个 文件夹 使用 git 管理 起来 让 这个 文件夹 变成 一个 git 仓库 这是 使用 git
的 第一步 在 VSCode 里面 选择 open folder 打开 电脑 上 的 任意 一个 文件夹 这个 文件夹 可以 是
空 文件夹 也 可以 是非 空 的 找到 左侧 的 sauce cont rol 也 就是 原代码 管理 点击 这个 init ialize
repo sitory 按钮 这样 就 完成 了 仓库 的 初始化 初始化 完成 以后 我们 看到 这个 文件夹 里面 多 了 一个
.
git 的 紫 文件夹 这个 紫 文件夹 里面 存储 了 一切 与 git 有关 的 数据 如果 把 这个 .
git 紫 文件夹 删除 就 取消 了 git 对 文件夹 的 管理 这个 文件夹 也 就 不再 是 一个 git 仓库 了
ignore 的 英文 意思 是 忽略 .
giti gnore 是 一个 文件 这个 文件 里面 声明 了 仓库 里面 哪些 文件 不 应该 受到 git 的 管理
比如 我们 文件夹 里面 有 存储 了 密钥 的 .
env 文件 这些 文件 应该 安全 的 保存 在 本地 不 应该 被 git 管理 更 不能 上 传到 github 上面 我们
可以 在 仓库 根目录 新建 一个 .
giti gnore 文件 然后 在 里面 写 一行 .
env 那 这个 文件 就 不再 被 git 管理 还有 一种 情况 像是 node . js
. js 项目 的 node modu les 文件夹 存放 了 所有 第三方 依赖 包 通常 里面 包含 成千上万 个 文件 如果
其他人 需要 可以 使用 npm inst all 随时 下载 因此 我们 通常 会 把 node modu les
目录 也 添加 进 .
git ignore 我们 在 .
git ignore 里面 写 一行 node modu les 注意 末尾 要 添加 一个 斜杠 表示 这是 一个 目录 那
这样 整个 目录 就 被 排除 在外 .
git ignore 最好 在 项目 初始化 的 时候 就 一起 创建 好 这样 可以 从 一 开始 就 避免 把 不 应该 提交 的 内容 误
提交 到 仓库 里面 所以 我们 使用 AEA 对 目录 进行 GIT 初始化 的 时候 可以 这么 说 把 这个 目录
进行 GIT 初始化 注意 把 不 需要 的 内容 都 排除 掉 我们 看到 AEA 为 我们 完成 了 GIT 初始化 并且 帮 我们
创建 好 了 .
GIT ignore 文件 它 自动 把 存放 了 密钥 的 文件 还有 Node Mojos 等等 都 排除 出去 了 Commit 的 英文 意思 是
提交 比如 视频 开头 写 论文 的 那个 例子 每 保存 一个 论文 的 历史 版本 就是 一次 提交 我们 每
完成 一次 Comm itGit 都 保存 了 仓库 此时 状态 的 快照 所有 文件 的 状态 都 被 记录 了 下来 随着 Commit
越来越 多会 形成 一条 Commit 的 历史 链路 这样 整个 仓库 都 是 可 回溯 可以 查看 历史 的 每个
参与者 的 每 一次 改动 都 会 被 Commit 链路 记录下来 我们 来到 VSCode 进入 项目 录 这里 我 可以 创建
一个 新 的 文件 Froost 然后 我们 在 里面 新加 一行 香蕉 接下来 我们 点击 左侧 的 sauce cont rol
按钮 这里 就 显示 了 两个 等待 提交 的 文件 一个 是 我们 刚才 创建 的 git 一个 now 还有 水果
清单 接下来 填写 一个 comm itme ssage 也 就是 提交 摘要 主要 讲清楚 这次 提交 都 做 了 什么
事情 这里 我 填写 一个 提交 摘要 然后 点击 commit 这样 我们 第一次 提交 就 完成 了 接下来 我 再
修改 一下 又 增加 了 一个 水果 还是 跟 刚才 一样 点击 commit 提交 上去 我 还 可以 修改 一行 再
提交 上去 如果 对 某 一次 代码 修改 不 满意 我们 可以 找到 这个 文件 点击 这里 的 disc ard
chan ges 也 就是 放弃 这次 代码 修改 把 代码 回退 到 上 一次 提交 也 就是 更改 之前 的 状态 我们
使用 AE 编程 的 时候 有 一个 技巧 就是 每次 让 AE 完成 一个 小 的 功能 点 我们 就 做 一次 commit
这样 可以 非常 好 的 保存 好 每次 的 历史记录 如果 我们 发现 AE 的 更改 不 符合 预期 可以 随时
点击 这个 disc ard 的 按钮 抛弃 掉 AE 的 更改 然后 我们 就 可以 修改 在 下面 的 graph 里面
可以 看到 每次 提交 的 历史 链路 然后 展开 具体 的 某 一次 commit 可以 看到 那次 提交 的 文件
改动 情况 如果 想要 查看 某次 提交 当时 的 代码 情况 我们 可以 把 鼠标 移动 到 某次 提交
上面 右键 点击 chec kout deta ched 这样 整个 仓库 就 回退 到 了 某个 历史 版本 不过 这个
状态 只 适合 查看 代码 并 不 适合 更改 任何 代码 原因 就 在于 deta ched 的 这个 词 中文翻译 过来
叫做 叫做 分离 头 指针 分离 头 指针 表示 当前 不 处于 任何 一个 分支 的 管理 中 在 这 里面 修改
容易 搞 丢 代码 如果 想 把 仓库 回到 最新 的 状态 我们 可以 点击 左下角 这个 按钮 然后 选择 Master
这样 我们 的 仓库 又 重新 回到 了 主干 也 就是 最新 的 状态 每次 提交 除了 有 Commit Mess age 也 就是
这里 的 新增 苹果 新增 荔枝 这种 话 每次 提交 也 都 是 有 ID 的 我们 把 鼠标 放到 某 一次 提交 上面 在
这里 有 一个 数字 加 英文 的 小 编号 这个 就是 提交 的 ID 叫做 Comm itID 这个 ID 是 Git 通过
哈希 算法 自动 计算出来 的 所以 Comm itID 又 叫做 Commit 哈希 我们 把 它 来 复制 一下 粘贴 到 一个
空白 文件 里面 我们 发现 粘贴 出来 它 变长 了 再 来 对比 一下 其实 这个 长 ID 前面 7 位 跟
短 ID 长 的 是 一模一样 的 所以 Comm itID 有 两种 一种 是 长 ID 一种 是 短 ID 短 ID 比较 方便 记忆
他们 两个 在 功能 上 是 完全 一样 的 Comm itID 在 一个 仓库 里面 是 绝对 唯一 的 所以 我们 跟 AA 交流 的
时候 最好 直接 使用 Comm itID 这样 会 更加 的 精确 我们 来 试一下 这里 我 想 让 AA 帮 我 把 山竹 跟
苹果 这 两次 提交 整个 移 除掉 把 仓库 回退 到 荔枝 这个 状态 我们 在 荔枝 上面 右键 选择 copy
commit hash 然后 把 这个 ID 粘贴 给 AA 你 把 仓库 还原 到 这次 提交 的 状态 它 后面 的 所有 提交 都 不要 了
AA 在 底层 执行 的 核心 命令 其实 是 git reset hard 但是 在 AA 时代 我们 完全 不 需要 记忆
这些 命令 你 只 需要 了解 commit 的 基础 概念 就 能 让 AA 完成 一切 操作 我们 回到 仓库 看 一下
现在 整个 仓库 已经 回退 到 了 对应 的 状态 后面 两次 提交 被 删除 了 再 来看 一个 例子 比如 我 发现 某
一次 提交 是 错误 的 就是 这个 香蕉 改 波罗 这 一次 我 想 把 这 一次 提交 的 改动 撤回 但是 又 不想 影响
其他 的 提交 这里 我们 右键 还是 复制 这 一次 提交 的 哈希 粘贴 给 AA 你 把 这 一次 的 提交 撤销 掉
保持 其他 的 不便 我们 看到 AA 在 底层 执行 的 是 Git Reward 命令 生成 了 一个 反向 提交
抵消 了 那次 的 操作 这样 就 可以 保持 其他 的 提交 不便 我们 再 看 一眼 仓库 最新 的 是 一次 反向 的 提交
抵消 了 那次 的 操作 我们 并不需要 记忆 命令 只 需要 用 自然语言 就 可以 让 AA 完成 操作 刚才 我们 介绍 了
三种 Git 后悔药 这里 简单 总结 一下 首先 是 Disc ardD iscard 的 行为 是 放弃 掉 还 没有 Commit
的 更改 它 的 使用 场景 是 当 文件 更改 还 没有 Commit 这时候 就 可以 使用 Disc ard 来 撤销 掉 第二个
是 Rese tReset 的 行为 是 把 仓库 强制 回退 到 某个 历史 状态 在 单人 分支 上 或者 被 撤销 的 改动 还
没有 提交 到 远端 仓库 的 时候 可以 使用 Reset 如果 被 撤销 的 改动 已经 上传 过 远端 仓库 reset
以后 就 必须 使用 强制 推送 来 强制 覆盖 远端 仓库 这种 操作 有 搞 丢 代码 的 风险 因此 在 多 人
协作 的 分支 上 是 禁止 使用 reset 的 第三个 是 reve rtre vert 是 通过 生成 一个 反向 的 提交 来
抵消 掉 某次 commit 所以 revert 比较 安全 在 多 人 协作 的 分支 上 应该 优先 使用 revert 来回 退 更改 好
我们 再 看 一个 例子 我 想 比较 一下 新增 荔枝 跟 新增 橘子 这 两次 提交 之间 修改 了 什么 内容 我 还是 把
两次 的 Commit ID 复制 下来 我 让 AEA 比较 一下 这 两次 提交 有 什么 区别 修改 了 什么 内容
AEA 帮 我们 完成 了 统计 列出 了 几次 提交 的 改动 修改 的 文件 统计 的 非常 好 我们 看到 AEA 在 底层
执行 的 是 GitD iff 命令 不过 我们 完全 不 需要 记忆 这些 命令 只 需要 理解 Commit 的 概念
就 可以 完成 操作 说 到 这里 我 想起 了 庄子 里面 的 一句 话言者 所以 在意 得意 而 妄言 也 就是 在 AA 时代
我们 只 需要 理解 Git 操作 的 本意 与 原理 即可 对 具体 的 命令 并不需要 死记硬背 Branch 的 英文 意思 是 分支
分支 简单 来说 就是 存储 库 的 不同 开发 线 默认 情况 下 每个 仓库 都 有 一个 MAN 分支 或者 Master
分支 也 就是 主干 分支 创建 分支 也 就是 创建 一个 副本 这里 补充 一下 创建 分支 的 操作 在
Git 里 是 通过 指针 来 实现 的 并不需要 拷贝 代码 比如 我 在 MAN 分支 上 创建 一个 feat ure
分支 feat ure 刚 创建 出来 的 时候 它 与 主干 的 代码 是 一样 的 当 你 对 feat ure 进行 代码 修改
并且 完成 commit 这些 新 的 提交 只 对 只能 在 feat ure 被 看到 而 不会 影响 主干 换句话说 当 你 切换 回
ment 主干 的 时候 是 看不到 feat ure 分支 的 代码 修改 的 这 就 意味着 在 各自 分支 上 的 代码 修改 不会
互相 影响 分支 对于 多人 或者 多 agent 的 协作 非常 有用 每个 人 或者 每个 agent 都 可以 创建 出
自己 的 分支 在 分支 上 进行 功能 开发 而 不会 影响 到 其他人 一旦 功能 开发 结束 就 可以 把 分支 合并 回
主干 这个 操作 称为 merge 也 就是 合 合并 我们 来到 VSCode 左下角 显示 我们 现在 master 分支
点击 一下 这个 按钮 然后 点击 create new branch 就是 基于 master 分支 创建 一个 新 的 分支
这里 分支 名 我 叫做 feat ure 左下角 这里 改成 了 feat ure 表示 我们 当前 处于 feat ure
分支 然后 我 又 改 了 一行 代码 提交 上去 了 我们 可以 点击 左下角 这个 分支 的 按钮 在 分支 之间
来回 切换 比如 这里 我 切换 回 master 我们 刚才 那个 新增 苹果 的 提交 在 master 上 是 看不到 的 如果
想 让 那次 提交 出现 在 master 上 我们 需要 把 feat ure 分支 合并 进 master 这里 我 可以 跟 AAS 说 把
feat ure 合并 进 mast erAAS 使用 了 git merge 命令 帮 我们 完成 了 合并 新增 苹果 这次 修改 也
从 feat ure 分支 合并 进来 了 当 我们 在 一个 分支 上 开发 完毕 并且 把 代码 合并 了 以后 一般来说
我们 就 会 删除 掉 这个 分支 Git 不 允许 我们 删除 当前 分支 所以 删除 分支 的 时候 我们 先 把 分支
切换 走 这里 先 切换 回 Master 然后 点击 右键 delete feat ure 这样 就 把 feat ure 分支 删除 了
我们 点击 按钮 基于 master 创建 的 分支 是 基于 master 的 最新 一次 提交 创建 的 我们 也 可以 基于
任何 一次 历史 提交 创建 分支 比如 这里 找到 芒果 这次 提交 点击 create branch 我 基于
芒果 的 这个 状态 创建 了 feat ure 2 分支 仓库 的 文件 也 还原 到 了 那次 提交 对应 的 状态 上面 这样
我们 介绍 了 两种 把 仓库 回退 到 历史 的 方法 第一种 右键 chec kout deta ched 也 就是 分离 头 指针 在
分离 头 指针 的 状态 下 最好 不要 进行 修改 容易 搞 丢 代码 第二种 方法 就是 基于 某个 历史 提交
直接 创建 分支 这样 代码 有 了 分支 的 管理 就 可以 自由 的 修改 不 容易 搞 丢 了 除了 基于 man 创建
分支 我们 也 可以 基于 任何 一个 分支 来 创建 分支 比如 我们 可以 基于 feat ure 分支
创建 一个 feat ure2 分支 feat ure2 会 包含 之前 feat ure 跟 man 上面 所有 的 代码
这时候 如果 我们 基于 man 创建 feat ure 3 分支 那 feat ure 3 分支 只能 看到 闷 分支 的
代码 我们 再 来 介绍 一个 Gate 的 概念 也 就是 Head Head 一句 话 总结 就是 当前 仓库 处于 哪 一次
commit 上 比如 我 现在 切换 到 闷 分支 当前 仓库 展现 的 是 闷 分支 最新 的 一次 提交 Head 就 指向 comm
it3 上面 如果 切换 到 feat ure 3 分支 Head 指向 comm it7 如果 切换 到 feat ure 分支
Head 指向 comm it5 还有 一种 情况 就是 Head 它 不 指向 任何 一个 分支 而 指向 某 一次
历史 提交 就是 我们 视频 前面 演示 的 chec kout detach 的 状态 也 就是 分离 头 指针 的 状态 work
tree 也 就是 Git 工作 术 它 本质 上 是 用 Git 创建 一个 新 的 分支 然后 把 这个 新 分支 的 代码 完整 的
复制 一份 到 一个 新 的 文件夹 里面 这个 新 文件夹 就是 一个 work tree 主 文件夹 和 分支 文件夹
可以 并行 的 工作 我们 可以 在 两个 文件夹 里面 各自 修改 代码 互相 不 干扰 我们 也 可以 基于
主干 创建 多个 分支 它们 在 底层 是 通过 Git 关联 在 一起 的 分支 文件夹 的 改动 都 能 轻松 合并 回
主干 我们 在 Codex 上 找到 我们 的 项目 点击 右键 创建 永久 工作 数 然后 给 分支 起个 名字 点击
创建 我们 看到 Codex 把 新创建 的 工作 数 放到 了 一个 全新 的 文件夹 下面 我们 可以 在 这个 文件夹
下面 进行 开发 测试 做 任何 的 操作 都 不会 影响 到 主干 文件夹 所以 它 可以 跟 主干 文件夹 并行 进行
开发 工作 我们 在 工作 数上 完成 了 开发 以后 就 可以 让 AA 把 工作 数 合并 回 主干 在 我 之前 的 这期 Codex
教程 里面 有 这块 的 详细 实战 接下来 我们 看 一下 Cloud Code 怎么 使用 Work Tree 这里 我们
来到 项目 文件夹 右键 在 终端 打开 然后 输入 这个 命令 cloud 两个 横杠 work tree 接下来
填写 分支 的 名字 这里 我 叫 add coco nut 这样 启动 的 clou dcode 就 处于 了 这个 work tree
里面 work tree 的 目录 就是 它 这里 显示 出来 的 目录 然后 我 让 clou dcode 干点活 给 水果 清单
添加 椰子 我们 来到 work tree 的 目录 可以 看到 水果 清单 里面 添加 了 椰子 但是 在 主干 的
这个 主 文件夹 里面 是 没有 的 接下来 我 让 clou dcode 提交 然后 合并 回 主干 最后 删除 掉 当前 的 work
tree 我们 看到 他 通过 Git Merge 命令 完成 了 合并 然后 把 Work Tree 删除 掉 了 在 主干 分支 上
这次 提交 也 合并 进来 了 我们 可以 使用 这个 命令 在 不同 的 窗口 里面 创建 多个 Work Tree
让 他 并行 工作 工作 完成 以后 再 合并 回 主干 这样 可以 提高 工作效率 如果 两个 分支 修改 了
同一个 文件 的 同一 行 代码 合并 的 时候 Git 无法 自动 确认 到底 保留 哪个 改动 这个 场景
就是 merge conf lict 也 就是 合并 冲突 这个 时候 我们 需要 人工 决定 到底 保留 哪个
分支 的 代码 这个 过程 就是 解决 冲突 解决 冲突 在 Git 里面 其实 是 个 比较 繁琐 的 操作 不过
现在 有 了 AAL 一切 就 简单 太多 了 我们 来看 一个 例子 这里 我 告诉 Codex 创建 一个 新 的 分支
把 第二行 改成 西瓜 再 创建 一个 新 的 分支 把 第二行 改成 草莓 Codex 完成 了 操作 我们 回 仓库 看
一眼 当 我们 在 草莓 分支 的 时候 第二行 是 草莓 当 我们 切换 成 西瓜 分支 第二行 就是 西瓜 这样 两个
分支 改动 了 同一个 文件 的 同一 行 它们 合并 就 会 产生 冲突 我 让 Codex 把 两个 分支 都 合并 进 主干 然后
遇到 冲突 就 停下来 让 我 选择 怎么 处理 这里 合并 的 时候 出现 了 冲突 Codex 询 我 应该 怎么
保留 他 给 了 我 几个 选项 我们 可以 选择 保留 任意 一个 也 可以 选择 两个 都 保留 这里 我 选择
两个 都 保留 顺序 是 西瓜 在 前 草莓 在 后 这样 Codex 就 按照 我 的 要求 解决 了 冲突 他 保留 了 两个 水果
最后 冲突 解决 了 合并 也 成功 了 我们 来 介绍 一组 Git 的 概念 也 就是 分区 第一个 分区 是 Work ing
Dire ctory 也 就是 工作 区 工作 区 就是 你 电脑 瓷盘 上 的 本地 文件夹 下 一个 分区 是 Local Repo sitory 也 就是
本地 仓库 Commit 以后 你 的 文件 改动 就 提交 到 了 本地 仓库 下 一个 分区 Remote Repo sitory 也 就是 远端
仓库 一般来说 我们 指 的 就是 GitHub 网站 当然 还有 其他 类型 的 远端 仓库 比如 GitL abGi tEE
等等 远端 仓库 用来 分享 或者 备份 代码 只有 推送 到 远端 在 Git
中 结作 是 一个 双向 的 代码 交换 我们
可以 使用 GitP ool 将 远端 存储 库 的 最新 改动 更新 并且 合并 到 本地 GitP ool 命令 同时
结合 了 两个 命令 一个 是 GitF etch 另外 一个 是 GitM erge 用来 将 远 端的 最新 改动 合并 进 你 的
本地 工作 区 所以 也 可以 使用 GitF etch 加 GitM erge 分 两步 来 同步 远端 代码 Git 还有
第四个 分区 就是 Stag ingA rea 或者 叫做 Inde xArea 中文翻译 过来 是 暂存区 可以 把 暂存区 看作 是
Commit 之 这 两 命令 在 VSCode 里面 合并 成
了 这 一个 按钮 这样 大幅 简化 了 Git 的 操作 复杂度 这里 我 再 补充 一下 在 VS Code 里面 也 是 可以
使用 暂存区 的 比如 现在 我 修改 了 四个 文件 , 我们 可以 在 某个 文件 的 右侧 点击 这个 加号 , 这里 写
的 是 stag eCha nges 也 就是 把 这个 文件 通过 GitAdd 的 命令 添加 到 暂存区 里面 , 这里 我先 添加
两个 这里 写 了 stag eCha nges 也 就是 这 两个 文件 在 暂存区 里面 接下来 我们 在 提交 的 时候 ,
就 只会 提交 暂存区 里面 两个 文件 如果 我们 不 选择 把 哪个 文件 添加 到 暂存区 , VSCode 的 默认
就是 把 所有 的 文件 一起 全部 Commit 我们 来 实战 一下 远端 仓库 的 操作 本地 仓库 有 两种 绑定
远端 仓库 的 方法 第一个 是 git clone 把 一个 远端 仓库 克隆 到 本地 第二个 是 git push
把 本地 仓库 上 传到 远端 我们 先看 第一种 方法 git clone 我们 来到 github 首页 点击 这个
new 按钮 在 github 上面 创建 一个 新 的 远端 仓库 这里 给 仓库 起个 名字 在 下面 可以 选择 是 公开
仓库 还有 私有 仓库 如果 是 公开 仓库 你 仓库 里面 的 代码 就 会 公布 在 网上 所有人 都 可以 查看 里面 的
代码 如果 选择 私有 仓库 则 只有 你 自己 可以 看到 这里 我 选择 公开 在 下面 还 可以 选择 是否
添加 Redmi 文件 Redmi 文件 就是 这个 仓库 的 说明 文件 是否 同步 创建 Giti gnore 是否
使用 开源 许可证 这里 我 直接 创建 好 这样 我们 的 仓库 就 创建 好 了 这里 给 到 了 一个 链接 就是 仓库
地址 我们 看到 这个 地址 中间 这 一串 是 我们 在 GitHub 上面 的 英文名字 后面 这 一串 是 仓库 的 名字 然后
我们 把 这个 地址 复制 一下 然后 我们 回到 电脑 上 还是 打开 Vscore 这里 在 菜单 里面 点击
close folder 先 退出 当前 的 项目 然后 在 source cont rol 这里 有 一个 克隆 按钮 我们 点击 一下
填写 上 刚才 项目 的 地址 回车 接下来 他 让 我们 选择 一个 文件夹 就是 把 这个 项目 克隆 到 你 本地
的 哪个 文件夹 里面 这里 我 选择 桌面 选择 确认 桌面上 就 多 了 这么 一个 文件夹 然后 我们 就 可以 在
项目 里面 新增 文件 进行 commit 再 点击 publ ish 按钮 把 文件 提交 到 github 上面 我们 回到
github 刷新 一下 就 看到 了 我们 在 本地 提交 上来 的 文件 这样 我们 就 使用 了 GitC lone 把 一个 远端
仓库 克隆 到 本地 同时 创建 出 本地 仓库 跟 本地 工作 目录 接下来 我们 修改 代码 通过 Commit
提交 到 本地 仓库 然后 再 在 本地 仓库 通过 Publ ish 提交 到 远端 仓库 这里 有个 注意事项 我们
使用 GitP ush 的 时候 只有 你 是 仓库 管理员 或者 管理员 给 你 添加 了 权限 你 才 可以 Push 成功 你 是 不能
往 别人 的 仓库 里面 Push 代码 了 如果 想 参与 贡献 开源 项目 在 后面 的 章节 我们 会 介绍 怎么 在 别人 的
仓库 里面 参与 贡献 接下来 我们 看 绑定 远端 仓库 的 第二种 方法 就是 先 初始化 一个 本地 仓库
然后 再 推送 到 远端 仓库 这里 我 有 一个 测试 文件夹 里面 已经 有 一些 代码 了 但是 它 还 没有 点 Gate
文件夹 也就是说 它 还 不是 一个 Gate 仓库 我们 来到 VSCode 这边 先 打开 这个 文件夹 然后 点击
Source Cont rol 点击 Init 按钮 先 把 它 初始化 成 一个 Gate 仓库 接下来 我们 做 一次 提交 把 仓库
里面 的 文件 先 commit 上去 然后 我们 点击 这个 publ ish 按钮 填写 一个 远端 仓库 的 名字
选择 是 公开 还是 私有 这里 我 选择 私有 仓库 好 这样 就 推送 成功 了 我们 点击 右下角 的 open
这样 在 github 上面 就 可以 看到 我们 的 代码 这里 写 着 priv ate 表示 它 是 一个 私有 仓库 只有 我
自己 才 可以 看到 其他人 访问 这个 地址 是 看不到 这些 代码 的 接下来 我们 看 怎么 把 远端 仓库 的 改动
同步 到 本地 这里 我 直接 在 github 上面 也 就是 远端 仓库 上面 进行 一点 更改 比如 这里 点击 i
的 file 点击 create new file 创建 一个 新 的 文件 这样 我 创建 了 一个 新 的 文件 写 了 一行 点击
右上角 的 commit 点击 确认 这个 commit 我 是 直接 在 远端 仓库 进行 的 更改 所以 在 本地 暂时 还
看不到 我们 在 sauce cont rol 这里 点击 这里 的 sync chan ges 这有 一个 向下 的 箭头 表示 1
也 就是 远端 有 一个 提交 我们 点击 这个 按钮 ok 这样 就 把 远 端的 提交 通过 gitp ool
拉到 了 本地 我们 看到 这个 文件 也 过来 了 除了 直接 在 远端 仓库 修改 代码 还有 一种 更 常见 的
情况 是 同事 或者 把 他 自己 的 提交 先 上 传到 了 远端 仓库 这时候 一般 我们 先 使用 Gitp ool
先 把 远端 仓库 的 改动 拉取 到 本地 有 了 远端 仓库 以后 我们 就 有 了 两种 分支 我们 看到 这里 写
的 是 Origin 的 意思 就是 远端 仓库 然后 这里 的 面 表示 我 的 本地 仓库 在 这个 图上 可以 看到 我
的 本地 仓库 的 面 分支 比起 远端 仓库 现在 多 了 两个 提交 上面 的 按钮 变成 了 SYNC Chan ges To
一个 上键头 表示 我 本地 有 两个 提交 还 没有 上 传到 远端 仓库 我们 点击 一下 这里 看到 Orig
inMan 跟 Man 都 处于 同一个 提交 也 就是 远端 仓库 跟 本地 仓库 现在 是 同步 的 状态 我们 来看
GitHub 最 核心 的 页面 Repo sitory 也 叫 存储 库 代码 仓库 首先 我们 先 看到 它 的 网址 这个 网址 分成 了
三个 部分 其中 最 左边 的 GitHub .
com 是 GitHub 的 主 域名 中间 的 Dock Mirror 是 开发者 的 名字 最后 的 DEVS idecar 则 是 仓库 的
英文名字 GitHub 所有 仓库 的 地址 都 是 遵循 这样 的 命名 规则 我们 进入 这个 仓库 以后 界面 中 最 显眼
的 部分 是 代码 库 也 就是 中间 这 一部分 里面 存放 的 是 整个 项目 的 原代码 我们 可以 直接 点开 查看
里面 的 内容 也 可以 点击 右上角 的 code 按钮 选择 down load 把 代码 作为 压缩包 整个 的 下载
下来 当然 我们 也 可以 使用 这个 地址 使用 GitK 龙 把 代码 拷贝到 本地 代码 库 的 每个 文件
后面 都 有 两条 信息 第一个 是 Comm itMe ssage 第二条 则 是 最后 一次 的 更新 日期 如果 一个
项目 中 的 所有 文件 更新 日期 都 是 很多年 前 那 就 代表 这个 项目 可能 很久没 人 维护 了 代码 库 的
下面 是 项目 的 介绍 GitHub 会 自动 读取 Redmi 文件 并 把 其中 的 内容 展示 到 这里 Redmi 文件 一般 展示 了
项目 的 基础 信息 介绍 了 项目 是 做 什么 用 的 解决 了 什么 问题 以及 如何 运行 使用 在 仓库 的 右侧
还有 一个 Rele ases 模块 这 里面 记录 了 项目 发布 版本 的 信息 找到 这里 的 Isses 里面 一般 有
作者 打包 好 的 软件 下载 下来 就 可以 直接 启动 Rele ases 中 包含 项目 的 版本号 还 包含 这个 版本
所有 的 更新 内容 我们 按照 需要 选择 不同 的 版本 进行 下载 Rele ases 的 上面 是 About
模块 这是 项目 的 简介 标签 Star 数 开源 协议 等等 其中 Star 类似 视频 网站 的 点 赞加 收藏 的
操作 能够 反映 项目 的 热度 如果 你 对 一个 项目 感兴趣 不妨 给 作者 点 一个 Star Star 的 左边 是
Folk 也 就是 复刻 指 的 是 把 项目 保存 一份 到 自己 的 名下 这里 点击 Crea teFolk 可以 看到 这里
产生 了 一个 一模一样 的 仓库 到 了 自己 的 名下 路径 中间 这里 的 作者 名字 换成 了 我 自己 Tech Trump
技术 巴巴 加 Folk 可以 帮助 我们 更 深入 的 学习 原代码 可以 根据 自己 的 需求 对 原代码 进行 DIY
还 可以 尝试 把 自己 的 修改 通过 Pool Requ est 也 就是 合并 请求 合并 进 作者 的 主 代码 库为 开源
项目 添砖加瓦 在 Folk 按钮 的 上面 是 Github 的 搜索 功能 你 可以 在 这里 对 项目 进行 搜索 也 可以 把 原本 的
内容 删除 搜索 整个 GitHub 上面 的 内容 跟 资源 仓库 的 左上角 还有 一个 重要 功能 issues 这里
可以 与 项目 作者 进行 讨论 我们 可以 点击 这里 的 new issue 发起 一个 讨论 比如 提出 你
在 项目 中 遇到 的 bug 帮助 对 项目 进行 完善 当然 也 可以 提出 对 项目 的 新 功能 的 期待 你 也 可以
参与 讨论 或者 帮助 其他人 解决问题 issue 分成 两种 open 跟 closed 其中 Open 一般 指 的 是
还 没有 解决 的 bug 或者 还 在 讨论 的 问题 Closed 的 则 是 指 的 已经 解决 的 bug 或者 已经 结束 的 讨论
我们 在 使用 或 学习 开源 项目 的 时候 不妨 在 这里 搜索 一番 因为 有些 问题 可能 别人 也 遇到 过
并且 在 一数 里面 已经 有人 给出 了 解决方案 我来 介绍 几个 GitHub 好用 的 快捷键 首先 是 斜线 它会
快速 的 打开 GitHub 的 搜索 功能 然后 是 键盘 上 的 T 键 它 会 快速 定位 到 文件 搜索 栏 我们 可以 在 这里
根据 文件 名字 搜索 对应 的 文件 我们 搜索 一个 文件 进来 以后 就 可以 查看 文件 内容
这里 还有 一个 好用 的 快捷键 是 键盘 上 的 L 键 我们 可以 快速 定位 到 一个 行号 比如 这里 我
定位 到 33 行 点击 go 我们 可以 选中 这个 行号 在 前面 又 有 很多 的 功能 copy line 指 的 是 复制
这 一行 的 代码 copy perm alink 是 复制 一个 永久 链接 我们 可以 通过 分享 这个 链接 与 其他人
分享 代码 还有 一个 重要 功能 是 GitB laymo 这个 页面 可以 看出 文件 的 提交 历史 也 就是
每行 代码 是 由 谁 提交 上来 的 下 一个 快捷键 我们 输入 键盘 上 的 问号 这里 会 打开 一个 快捷键 的 快速
速查表 快捷键 我们 可以 通过 这个 表单 直接 找到 比如 这里 的 GC 就是 GoTo Code 也 就是
快速 查看 代码 GI 是 快速 查看 医术 我们 来 试一下 先点 G 再点 I 就 快速 进入 了 医术 页面 如果
忘记 了 某个 快捷键 我们 要 记得 使用 问号 快速 查看 这个 表格 最后 一个 快捷键 是 键盘 上 的
句号 GitHub 会为 我们 打开 一个 网页 版 的 VSCode 我们 可以 在 这 里面 查看 代码 搜索 像 VSCode
一样 安装 插件 完成 一些 简单 的 代码 查看 如果 你 想 对 这 里面 的 代码 进行 调试 GitHub 同样
提供 了 一个 Code Space 的 运行 环境 我们 点击 这个 运行 跟 调试 按钮 点击 继续 工作 点击
Create new code space 这里 我们 可以 根据 需求 从 Github 申请 一个 远程 的 运行 环境 这里 我
选择 这个 双核 8GB 内存 的 运行 环境 我们 点击 运行 这样 我们 就 申请 到 了 一个 远程 的 运行
环境 可以 直接 在 浏览器 里面 调试 修改 代码 我们 找到 右上角 的 这个 RUN 按钮 可以 直接
调试 python 代码 可以 看到 这里 成功 的 出现 了 输出 接下来 我们 看 怎么 在 GitHub 上面 进行 多人
协作 或者说 怎么 给 开源 项目 贡献 自己 的 代码 这里 我换 了 一个 账号 登陆 GitHub 进行 演示
这个 账号 是 爬 巴虾 的 小 跟班 比如 有 一天 爬巴虾 的 小 跟班 在 GitHub 上面 发现 了 一个 非常 棒 的 开源
项目 就是 这个 技术 爬巴虾 的 开源 项目 然后 小 跟班 想 为 这个 开源 项目 添砖加瓦 贡献 自己 的 代码
这里 小 跟班 是 没有 权限 直接 向 这个 项目 本身 提交 代码 的 所以 他 要 做 的 第一步 就是 点击
这里 的 Folk 按钮 Folk 的 意思 是 复刻 就是 把 这个 项目 复制 一份 到 自己 的 名字 下面 这里 小 跟班
点击 Folk 按钮 然后 直接 点击 Crea teFolk 这样 这个 开源 项目 就 复刻 了 一份 到 小 跟班 自己 的
名字 下面 了 接下来 小 跟班 可以 在 code 这里 复制 项目 地址 然后 小 跟班 来到 VSCode 点击 这个
克隆 按钮 然后 把 它 自己 名下 也 就是 复刻 出来 的 这个 子项目 的 地址 填写 过来 这样 小 跟班 在 本地 就
打开 了 这个 项目 小 跟班 在 动手 修改 任何 代码 之前 一定 要 先 创建 分支 不要 直接 在 主干 分支 上
进行 修改 创建 分支 最大 的 好处 是 当 小 跟班 从母 项目 或者说 从 上游 项目 同步 代码 的 时候
因为 小 跟班 的 改动 都 在 分支 上 这时候 同步 代码 不会 产生 冲突 点击 左下角 的 man 这里
这里 点击 创建 分支 在 这个 分支 上面 新增 了 一个 水果 然后 小 跟班 把 这个 改动 提交 上去 再
点击 publ ish 按钮 推送 到 getup 上面 我们 在 getup 上面 切换 到 对应 的 分支 就 可以 看到 这次
提交 了 下 一步 小 跟班 可以 通过 创建 Pool Requ est 的 形式 把 自己 的 改动 合并 回 上游 项目 或者
叫做 母 项目 Pool Requ est 直译 过来 是 拉取 请求 不过 我 更 喜欢 它 的 另外 一个 翻译 那 就是
合并 请求 合并 请求 是 把 一个 分支 的 改动 合并 进 另 一个 分支 的 提案 通常 来说 项目 贡献者 先 把
开源 项目 复刻 一份 到 自己 的 名下 然后 创建 分支 在 分支 上 修改 代码 并且 完成 Commit 接下来
贡献者 创建 Pool Requ est 也 就是 把 自己 的 分支 合并 进 主干 分支 的 提案 Pool Requ est 会 展示
两个 分支 之间 的 代码 差异 然后 开源 仓库 的 管理员 会 来 审核 这个 代码 的 改动 这个 过程
叫做 Code Review 也 就是 代码 审核 在 代码 审核 过程 中 管理员 可以 提出 自己 的 修改意见 当 管理员
确认 代码 是 OK 的 以后 他 就 可以 同意 合并 这样 贡献者 的 代码 就 会 合并 进 主干 协作 开发 也 就 完成
了 这里 我来 演示 一个 场景 我 现在 的 角色 是 爬 爬 虾 在 小 跟班 那边 修改 代码 的 同时 上游 项目 也
就是 爬 爬 虾 这边 也 在 修改 代码 爬 爬 虾 也 在 水果 列表 里面 新增 了 一个 水果 并且 爬 爬 虾 已经
提交 上去 了 小 跟班 在 进行 pool requ est 之前 他 有 一个 准备 工作 必须 要 做 就是 先把母 项目 也 就是
上游 项目 那边 的 代码 同步 过来 确保 自己 这边 已经 包含 了 母 项目 那边 最新 的 代码 并且
没有 冲突 这时候 才能 创建 Pool Requ est 我们 来看 一下 这个 图 如果 Fature 分支 跟 主干
同时 提交 了 代码 修改 这时候 创建 PR 很 可能 会 因为 修改 了 同一个 文件 而 产生 冲突 所以 正确 的
做法 是 先 把 主干 的 改动 同步 到 Fature 分支 上 在 本地 解决 冲突 然后 再 提交 PR 这样 才 不会 有 问题
这个 操作 我们 可以 交给 AI 来 完成 这里 我用 小 跟班 打开 Codex 注意 先 把 分支 切换 成 Fature
分支 我 把 这个 链接 粘 过来 我 告诉 他 这 是 爬 爬 虾 那边 的 母 项目 我要 你 把 母 项目 的 最新 改动 先 合并 进
当前 分支 注意 如果 有 冲突 让 我 选择 怎么 处理 我们 看到 Codex 先帮 我们 从母 项目 那边
同步 代码 然后 他 合并 母 项目 的 时候 遇到 了 冲突 这里 他 问 我 怎么 处理 我 告诉 他 两个 都 保留 那 就 先
樱桃 再 里子 这 样子 项目 已经 同步 了 母 项目 的 最新 改动 接下来 我们 记得 把 本地 的 改动 推送 到 getup
上面 然后 我们 就 可以 正式 的 来 创建 pr 了 这里 我们 来到 小 跟班 的 子项目 点击 pull requ est
点击 new pull requ est 这里 一定 要 选择 好 合并 方向 我们 是 把 下游 项目 也 就是 子项目 的
feat ure 分支 往母 项目 那边 的 闷 分支 合并 注意 好 这个 箭头 的 合并 方向 点击 create pull
requ est 这里 可以 填写 一个 标题 比如 我 填写 为 水果 清单 增加 更 多 水果 最后 点击 pull
requ est 把 这个 合并 请求 创建 出来 我 现在 的 角色 是 啪啪 瞎 也 就是 这个 母 项目 的 管理员 当 有人 提交
pull requ est 的 时候 开源 仓库 的 维护者 都 会 收到 邮件 然后 他 在 Pull Requ est 这里 就
可以 看到 所有 的 合并 请求 点击 进来 就 可以 查阅 这个 请求 可以 在 File Chan ges 这里
查看 对方 提交 的 代码 如果 管理员 觉得 这些 代码 还 需要 修改 他 可以 在 下面 提交 自己 的 建议
如果 他 觉得 一切 没 问题 就 可以 点击 这个 Merge 按钮 同意 这 一次 的 合并 请求 再 点击 Conf irm
这样 就 把 小 助理 贡献 的 代码 合并 进 了 主干 在 某 项目 的 水果 清单 里面 就 增加 了 这个 樱桃 在 右下角
的 贡献者 这里 出现 了 小 助理 的 名字 第一次 开源 项目 合作 的 全 流程 就 完成 了 刚才 我们 介绍 的 是 开源
项目 的 多 人 协作 还有 一种 情况 就是 开发者 跟 管理员 在 同一个 公司 里面 或者 管理员
把 开发者 添加 成 了 协作者 这时候 有 一个 步骤 就 可以 省略 了 就是 不 需要 fork 代码 了 现在 我 的 身份
是 技术 啪啪 瞎 也 就是 项目 的 管理员 管理员 可以 来到 siti ngs 这里 有 一个 coll abor ators 也 就是
项目 合作者 这里 点击 add people 然后 搜索 到 小 跟班 的 名字 点击 add 然后 在 小 跟班 的 github
账号 的 首页 右上角 有 一个 收件箱 这 里面 是 一个 协作者 的 邀请 小 跟班 可以 在 这里 点击 确认 这样 小 跟班 就
变成 了 项目 的 协作者 他 就 有 了 权限 直接 往 这个 项目 的 远端 仓库 来 push 代码 这时候 小 跟班 就 不
需要 复刻 项目 了 他 可以 直接 拉 分支 然后 提交 代码 并且 push 到 远端 仓库 在 提交 pr 之前 先
合并 一下 主干 上 的 最新 改动 然后 提交 分支 到 主干 的 pull requ est 接下来 管理员 审核 代码
最后 合并 Terry Peak 字面 意思 是 挑选 樱头 在 Git 的 语境 里面 就是 拣选 提交 比如 我 在
Fature 分支 上 进行 了 三次 提交 分别 创建 了 蔬菜 清单 肉类 清单 跟 主食 清单 三个 文件 正常
来说 如果 把 feat ure 分支 合并 进 主干 那 这 三次 commit 还有 三个 新 文件 都 会 加入 主干 现在 我 想 做
的 是 只 把 蔬菜 跟 主食 这 两次 提交 合并 进 主干 而 肉类 这次 提交 不 合并 这里 就 可以 使用 cher
rypick 来 实现 这里 我们 来 把 需要 的 两次 提交 的 ID 来 复制 一下 首先 是 蔬菜 这次 提交 的 ID 复制
一下 粘贴 给 AI 接下来 主食 这个 ID 复制 一下 粘贴 给 AI 然后 我 输入 提示 词 你 把 这 两次
提交 cher rypick 进 主干 好 AI 帮 我 我们 cherry pick 进来 了 这里 我们 在 焖 粉汁 可以 看到 蔬菜 跟
主食 这 两次 提交 而 肉类 那个 提交 没有 合并 过来 这样 cherry pick 就 成功 了 stash 的 意思
是 临时 存储 注意 这个 跟 暂存区 不是 一 回事 比如 我 现在 在 feat ure 分支 上 写 代码 我 想 新增 一个
水果 但是 我 代码 写 了 一半 还 没有 写 完 现在 我 需要 紧急 切换 到 man 分支 处理 一个 临时 的 任务
如果 我 在 这里 直接 切换 分支 那 这里 写 了 一半 的 代码 会 被 直接 带 过去 这 显然 不是 我 想要 的 这里 有 两种
解决方案 第一个 方案 是 我 直接 在 feat ure 分支 上 做 一个 commit 把 代码 提交 了 然后 我 再 切换 到 man
第二个 方案 我们 就 使用 stash 把 没 写 完 的 代码 我们 把 代码 临时 存储 一下 等 下 切换 回来 的 时候 再
把 代码 拿 出来 继续 写 这里 我来 使用 一下 stash 我们 点击 这 三个 点 这里 有 一个 stash 然后 点击
这个 stash 随便 起个 名字 这里 直接 回车 就行了 这样 我们 没写 完 的 代码 就 被 存储 起来 了
然后 我们 就 可以 切换 回闷 分支 在 闷 分支 上 进行 工作 等 我们 完成 了 闷 分支 的 工作 我们 可以 再 切换 回
feat ure 分支 这里 需要 把 没 写 完 的 代码 拿 出来 继续 写 选择 这个 pop 就是 拿 回来 继续 写
这样 就 把 没 写 完 的 代码 又 拿 回来 rebase 的 意思 是 遍积 这个 属于 Git 的 进阶 操作 了 我们 来 简单 看
一下 feat ure 分支 只有 一个 C2 提交 man 分支 有 C3 C4 C5 三次 提交 现在 我
需要 把 man 分支 合并 进 feat ure 分支 这里 我们 不 使用 march 命令 了 我 使用 rebase 命令 那 就是
这个 样 getr ebase 后面 还是 分支 的 名字 那 就是 man 分支 这个 rebase 命令 有 两层 的 理解 从 最终
达成 的 效果 来看 可以 认为 是 把 MAN 分支 合并 进 了 feat ure 分支 第二层 理解 是 把
feat ure 分支 变积 到 了 MAN 分支 这里 的 rebase 就是 变积 也 就是 更改 递积 我们 把 这个
命令 敲下去 看 一下 可以 看到 feat ure 分支 整个 就 消失 了 这个 C2 作为 一次 新 的 提交 变成
C2 一撇 挂到 了 下面 这个 就是 变积 它 的 意思 是 说 我 自己 的 这根 线 也 就是 我 的 根基 不 存在 了 我
把 我 的 根基 变更 到 了 MAN 分支 上 然后 我 把 C2 提交 新 生成 一个 C2 一撇 这个 操作 就 叫做
变积 从 最终 达成 的 效果 来看 可以 认为 是 把 MAN 分支 合并 进 了 feat ure 分支 第二层
理解 是 把 feat ure 分支 变积 到 了 MAN 分支 这里 还是 进入 需要 被 合并 的 分支 还是
feat ure 分支 我们 点击 下面 的 create emerge 然后 这里 选择 rebase 就是 变积 好 我们 点击
rebase 这里 给 了 一个 提示 如果 你 使用 遍及 操作 的话 你 必须 强制 推送 到 Github 网站 就是 Git
push - F 命令 也 就是 强制 推送 好 我们 先 不管 这个 提示 直接 Begin Rebass 好 遍及 结束 我们
来看 一下 历史记录 可以 看到 3452 这个 提交 都 在 这 一个 分支 上 而且 这 一次 没有 再 创建 这个
Merge 某某 某某某 commit 的 这么 一个 提交 记录 了 这个 也 就是 rebase 遍积 最大 的 一个 好处 就是 它
不会 创建 那种 merge 什么 什么 什么 的 那种 提交 记录 会 让 这个 历史 数 变得 更加 干净 经过
遍积 操作 以后 必须 强制 推送 到 远端 而 不能 使用 普通 的 推送 了 它 的 根基 发生 了 变化 只能
使用 强制 推送 那 这里 我们 把 它 强 推上去 然后 点击 I ' m sure 好 这 就 强制 推送 成功 了 强制
推送 只 适合 于 这种 只有 你 一个 人 使用 的 分支 如果 这个 分支 是 多 人 协作 分支 也 就是 很多 个 同事 往
同一个 分支 上面 提交 代码 这时候 是 万万不能 使用 强制 推送 的 你 使用 强制 推送 有 可能 会 把 别人
写 的 代码 给 覆盖 掉 把 别人 写 的 代码 搞 丢 好 这 就是 本期 视频 全部内容 了 感谢 大家 点赞 支持 我们
下期 再见
Loading video analysis...