# SourceTree 速成速查 目的:快速掌握 Git 基础概念和 SourceTree 常用操作,能够完成基础学习中的代码管理考核。 ## 1. Git 基础概念 ### 1.1 Git 是什么 Git 是一个分布式版本控制工具,用来记录代码每一次修改,方便回退、对比、分支开发和多人协作。 一句话: > Git 负责记录代码历史,SourceTree 是 Git 的图形化操作工具。 ### 1.2 三个区域 | 区域 | 含义 | SourceTree 中的表现 | | --- | --- | --- | | 工作区 | 当前正在编辑的文件 | 未暂存文件 | | 暂存区 | 准备提交的文件 | 已暂存文件 | | 本地仓库 | 已经提交保存的历史记录 | History/日志中的提交节点 | 常用流程: ```text 修改文件 -> 暂存 -> 提交 -> 推送 ``` ### 1.3 仓库 仓库是 Git 管理代码历史的目录,里面有一个隐藏的 `.git` 文件夹。 - 本地仓库:自己电脑上的仓库。 - 远程仓库:服务器上的仓库,例如 Gitea、GitLab、GitHub。 注意: > 不要手动删除 `.git` 文件夹,否则仓库历史会丢失。 ### 1.4 节点 节点就是一次提交记录,也叫 commit。 每个节点通常包含: - 修改内容。 - 提交人。 - 提交时间。 - 提交说明。 - 唯一提交号。 ### 1.5 分支 分支是独立开发线,用于在不影响主线的情况下开发功能。 常见分支: - `master/main`:主分支。 - `dev`:开发分支。 - `feature_xxx`:功能分支。 一句话: > 分支用于并行开发,合并用于把一个分支的修改整合到另一个分支。 ## 2. SourceTree 基础概念 SourceTree 是 Atlassian 提供的 Git 图形化工具,可以通过界面完成提交、分支、合并、拉取、推送、补丁、贮藏等操作。 常见区域: | 区域 | 作用 | | --- | --- | | 文件状态 | 查看工作区和暂存区文件 | | History/日志 | 查看提交节点历史 | | 分支 | 查看和切换分支 | | 远端 | 查看远程仓库分支 | | 工具栏 | 提交、拉取、推送、获取、分支、合并等 | ## 3. 仓库相关操作 ### 3.1 创建本地仓库 作用:把一个普通文件夹变成 Git 仓库。 操作: 1. 打开 SourceTree。 2. 点击 `创建`。 3. 选择本地路径。 4. 点击创建。 结果: ```text 目录中生成 .git 文件夹 ``` ### 3.2 打开本地仓库 作用:把已有 Git 仓库加入 SourceTree 管理。 操作: 1. 点击 `添加` 或 `打开`。 2. 选择本地仓库目录。 3. 打开后即可查看提交历史和文件状态。 ### 3.3 克隆远程仓库 作用:第一次从远程仓库完整下载代码和历史。 操作: 1. 点击 `克隆`。 2. 填写远程仓库地址。 3. 选择本地保存路径。 4. 点击克隆。 一句话: > 克隆是第一次把远程仓库完整复制到本地。 ### 3.4 获取 Fetch 作用:只获取远程最新提交信息,不自动修改本地工作文件。 理解: ```text Fetch = 看远程有没有新东西 ``` 适用场景: - 想先看看远程有没有更新。 - 不想立刻合并到本地。 ### 3.5 关联远程仓库 作用:让本地仓库知道要连接哪个远程仓库。 操作: 1. 打开仓库设置。 2. 添加远程仓库。 3. 名称通常写 `origin`。 4. URL 填远程仓库地址。 常用命令理解: ```bash git remote add origin 仓库地址 ``` ## 4. 节点相关操作 ### 4.1 提交 Commit 作用:把暂存区内容保存成一个提交节点。 操作: 1. 修改文件。 2. 在文件状态中勾选或点击暂存。 3. 写提交说明。 4. 点击提交。 提交说明建议: ```text docs: update markdown note fix: correct add function feat: add login module ``` ### 4.2 重置 Reset 作用:把当前分支指针移动到某个历史提交。 常见类型: | 类型 | 含义 | | --- | --- | | Soft | 保留修改到暂存区 | | Mixed | 保留修改到工作区 | | Hard | 丢弃提交后的修改,风险最高 | 考核记忆: > 重置是改变当前分支指向,Hard Reset 会丢修改,操作前要确认。 ### 4.3 回滚提交 Revert 作用:生成一个新的反向提交,用来抵消某次提交。 示例: ```text A -> B -> C ``` 如果 B 有问题,对 B 执行回滚后: ```text A -> B -> C -> D ``` D 是新的反向提交,用来撤销 B 的修改。 重置和回滚区别: | 操作 | 是否新增提交 | 是否改历史 | | --- | --- | --- | | Reset | 不新增 | 会改变分支指针 | | Revert | 新增反向提交 | 不破坏已有历史 | ## 5. 分支相关操作 ### 5.1 新建分支 作用:从当前节点创建一条新的开发线。 操作: 1. 点击 `分支`。 2. 输入分支名,例如 `feature/add-calc`。 3. 点击创建。 ### 5.2 切换分支 作用:切换到另一条开发线。 操作: 1. 在左侧分支列表选择目标分支。 2. 双击或右键检出。 注意: > 如果当前工作区有未提交修改,切换分支可能失败,需要先提交、贮藏或丢弃。 ### 5.3 合并分支 作用:把另一个分支的修改合并到当前分支。 操作: 1. 先切换到接收修改的分支,例如 `master`。 2. 点击 `合并`。 3. 选择要合并进来的分支。 4. 确认合并。 一句话: > 站在哪个分支上执行合并,修改就合并到哪个分支。 ### 5.4 删除分支 作用:删除不再需要的分支。 操作: 1. 右键目标分支。 2. 选择删除分支。 注意: - 不要删除当前正在使用的分支。 - 删除前确认分支内容已经合并或不再需要。 ### 5.5 制造冲突 冲突通常发生在两个分支修改了同一个文件的同一位置。 练习方式: 1. 在 `master` 修改 `README.md` 某一行并提交。 2. 在 `feature` 修改同一行并提交。 3. 切回 `master` 合并 `feature`。 4. 出现冲突。 ### 5.6 解决冲突 操作: 1. 打开冲突文件。 2. 找到冲突标记。 3. 手动保留正确内容。 4. 删除冲突标记。 5. 标记为已解决。 6. 提交合并结果。 冲突标记示例: ```text <<<<<<< HEAD 当前分支内容 ======= 被合并分支内容 >>>>>>> feature ``` ### 5.7 拉取 Pull 作用:获取远程更新并合并到当前分支。 理解: ```text Pull = Fetch + Merge ``` 适用场景: - 同步远程最新代码。 - 推送前先确认本地不是落后的旧版本。 注意: > 拉取不会无脑覆盖你的新代码。如果同一位置有冲突,需要你手动解决。 ### 5.8 推送 Push 作用:把本地提交上传到远程仓库。 操作: 1. 本地完成提交。 2. 点击 `推送`。 3. 选择要推送的分支。 4. 确认推送。 注意: - 没有提交的工作区修改不能直接推送。 - 本地落后远程时,通常需要先拉取或变基。 ## 6. 其他常用操作 ### 6.1 书写忽略文件 `.gitignore` 用于指定哪些文件不需要 Git 管理。 示例: ```gitignore Debug/ Release/ *.obj *.exe *.log .vs/ ``` 注意: > `.gitignore` 只对未被跟踪的文件自动生效;已经提交过的文件需要停止跟踪。 ### 6.2 停止跟踪 作用:文件已经被 Git 管理,后来不想继续让 Git 管理,但本地文件还保留。 命令理解: ```bash git rm --cached 文件名 ``` 适用场景: - 误把编译输出文件提交进仓库。 - 后来才把文件加入 `.gitignore`。 ### 6.3 创建补丁方式一:工作区补丁 作用:把当前未提交修改导出成补丁文件。 适用场景: - 不想提交,但想把修改发给别人。 - 想把当前修改临时保存成文件。 命令理解: ```bash git diff > working-tree.patch ``` 注意: > 新建的未跟踪文件需要先暂存,普通工作区补丁才容易包含它。 ### 6.4 创建补丁方式二:提交补丁 作用:把某次提交导出成补丁文件。 命令理解: ```bash git format-patch -1 HEAD ``` 特点: - 会包含提交作者、时间、提交说明。 - 适合把某个提交发给别人应用。 ### 6.5 应用补丁方式一:git apply 作用:只应用补丁里的文件修改,不自动生成提交。 命令理解: ```bash git apply working-tree.patch ``` 适用场景: - 只想把别人改的内容应用到当前工作区。 - 应用后自己检查,再决定是否提交。 ### 6.6 应用补丁方式二:git am 作用:应用 `format-patch` 生成的提交补丁,并尽量保留原提交信息。 命令理解: ```bash git am 0001-xxx.patch ``` 适用场景: - 别人发来的是提交补丁。 - 希望保留原提交说明和作者信息。 补丁注意事项: > 补丁不是完整文件,而是修改差异。应用补丁时,当前代码和补丁生成时的上下文要接近,否则可能失败或生成 `.rej` 文件。 ### 6.7 贮藏 Stash 作用:临时保存当前未提交修改,让工作区变干净。 适用场景: - 当前改了一半,需要临时切换分支。 - 不想提交半成品代码。 常见流程: ```text 贮藏 -> 切换分支处理事情 -> 回来应用贮藏 ``` ### 6.8 丢弃 Discard 作用:丢弃工作区未提交修改。 注意: > 丢弃后修改通常很难找回,操作前确认不要这些改动。 适用场景: - 文件改错了,想恢复到上一次提交状态。 - 临时调试内容不需要保留。 ### 6.9 移除 Remove 作用:从仓库中删除文件。 区别: | 操作 | 含义 | | --- | --- | | 丢弃 | 放弃未提交修改 | | 移除 | 删除文件并让 Git 记录删除 | | 停止跟踪 | Git 不再管理文件,但本地保留 | ### 6.10 创建标签 Tag 作用:给某个提交节点打一个固定标记。 适用场景: - 标记版本发布。 - 标记验收节点。 示例: ```text v1.0 basic-learn-done ``` ### 6.11 删除标签 作用:删除不再需要或打错的标签。 注意: - 本地标签和远程标签可能需要分别删除。 - 删除前确认标签不再需要。 ## 7. 附加知识点 ### 7.1 变基 Rebase 作用:把当前分支的提交移动到另一个分支最新提交之后,让提交历史更直。 示例: ```text 合并 Merge:保留分叉和合并节点 变基 Rebase:把提交重新排列到最新节点后面 ``` 适用场景: - 本地功能分支想基于最新主分支继续开发。 - 希望提交历史更整洁。 注意: > 不要随便对已经推送并被别人使用的公共分支做 rebase,容易影响别人历史。 ## 8. 综合最终状态 完成一系列操作后,理想状态是: - 工作区干净,没有未提交修改。 - 当前分支清楚,例如在 `master` 或 `dev`。 - 本地提交已经按要求完成。 - 远程仓库已经同步最新提交。 - 冲突已经解决。 - 不需要的临时文件已经忽略或停止跟踪。 - 标签、补丁、贮藏等操作能说明用途和区别。 ## 9. SourceTree 常用快捷键 说明:SourceTree 不同版本和系统快捷键可能略有差异,实际以菜单栏显示为准。Windows 中常见规律是 `Ctrl` 对应 macOS 的 `Cmd`。 | 功能 | 常用快捷键 | 说明 | | --- | --- | --- | | 新建/克隆仓库 | `Ctrl + N` | 打开新建或克隆相关入口,具体以版本为准 | | 打开仓库 | `Ctrl + O` | 打开已有本地仓库 | | 查找 | `Ctrl + F` | 在当前视图中搜索提交、文件或内容 | | 刷新 | `F5` | 刷新当前仓库状态 | | 提交 | `Ctrl + Enter` | 在提交界面中提交已暂存内容,部分版本支持 | | 全选文本 | `Ctrl + A` | 编辑提交说明或文本时全选 | | 复制 | `Ctrl + C` | 复制选中内容,例如提交号、文本 | | 粘贴 | `Ctrl + V` | 粘贴文本,例如提交说明 | | 剪切 | `Ctrl + X` | 剪切文本 | | 撤销文本输入 | `Ctrl + Z` | 撤销提交说明等文本输入 | | 重做文本输入 | `Ctrl + Y` | 恢复撤销的文本输入 | | 切换标签页 | `Ctrl + Tab` | 多仓库标签页之间切换,部分版本支持 | | 关闭当前标签页 | `Ctrl + W` | 关闭当前仓库标签页,部分版本支持 | 更稳的考核记法: - SourceTree 主要考操作流程,不主要考快捷键。 - 真实快捷键可以看菜单栏右侧显示。 - 不确定快捷键时,直接使用工具栏按钮和右键菜单完成操作。 ## 10. 考核速记口诀 - Git:记录代码历史。 - SourceTree:Git 图形化工具。 - 工作区:正在改。 - 暂存区:准备提交。 - 本地仓库:已经提交。 - Fetch:只获取远程信息。 - Pull:获取并合并。 - Push:上传本地提交。 - Commit:生成提交节点。 - Reset:移动分支指针。 - Revert:新增反向提交。 - Branch:分支开发。 - Merge:合并分支。 - Stash:临时保存未提交修改。 - Discard:丢弃未提交修改。 - Stop Tracking:停止跟踪但本地保留。 - Patch:保存或传递修改差异。 - Tag:给提交节点打版本标记。 ## 11. 资料来源 - Atlassian SourceTree 文档:https://confluence.atlassian.com/get-started-with-sourcetree - Atlassian Git 教程:https://www.atlassian.com/git/tutorials