学习远程仓库
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

13 KiB

SourceTree 速成速查

目的:快速掌握 Git 基础概念和 SourceTree 常用操作,能够完成基础学习中的代码管理考核。

1. Git 基础概念

1.1 Git 是什么

Git 是一个分布式版本控制工具,用来记录代码每一次修改,方便回退、对比、分支开发和多人协作。

一句话:

Git 负责记录代码历史,SourceTree 是 Git 的图形化操作工具。

1.2 三个区域

区域 含义 SourceTree 中的表现
工作区 当前正在编辑的文件 未暂存文件
暂存区 准备提交的文件 已暂存文件
本地仓库 已经提交保存的历史记录 History/日志中的提交节点

常用流程:

修改文件 -> 暂存 -> 提交 -> 推送

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. 点击创建。

结果:

目录中生成 .git 文件夹

3.2 打开本地仓库

作用:把已有 Git 仓库加入 SourceTree 管理。

操作:

  1. 点击 添加打开
  2. 选择本地仓库目录。
  3. 打开后即可查看提交历史和文件状态。

3.3 克隆远程仓库

作用:第一次从远程仓库完整下载代码和历史。

操作:

  1. 点击 克隆
  2. 填写远程仓库地址。
  3. 选择本地保存路径。
  4. 点击克隆。

一句话:

克隆是第一次把远程仓库完整复制到本地。

3.4 获取 Fetch

作用:只获取远程最新提交信息,不自动修改本地工作文件。

理解:

Fetch = 看远程有没有新东西

适用场景:

  • 想先看看远程有没有更新。
  • 不想立刻合并到本地。

3.5 关联远程仓库

作用:让本地仓库知道要连接哪个远程仓库。

操作:

  1. 打开仓库设置。
  2. 添加远程仓库。
  3. 名称通常写 origin
  4. URL 填远程仓库地址。

常用命令理解:

git remote add origin 仓库地址

4. 节点相关操作

4.1 提交 Commit

作用:把暂存区内容保存成一个提交节点。

操作:

  1. 修改文件。
  2. 在文件状态中勾选或点击暂存。
  3. 写提交说明。
  4. 点击提交。

提交说明建议:

docs: update markdown note
fix: correct add function
feat: add login module

4.2 重置 Reset

作用:把当前分支指针移动到某个历史提交。

常见类型:

类型 含义
Soft 保留修改到暂存区
Mixed 保留修改到工作区
Hard 丢弃提交后的修改,风险最高

考核记忆:

重置是改变当前分支指向,Hard Reset 会丢修改,操作前要确认。

4.3 回滚提交 Revert

作用:生成一个新的反向提交,用来抵消某次提交。

示例:

A -> B -> C

如果 B 有问题,对 B 执行回滚后:

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. 提交合并结果。

冲突标记示例:

<<<<<<< HEAD
当前分支内容
=======
被合并分支内容
>>>>>>> feature

5.7 拉取 Pull

作用:获取远程更新并合并到当前分支。

理解:

Pull = Fetch + Merge

适用场景:

  • 同步远程最新代码。
  • 推送前先确认本地不是落后的旧版本。

注意:

拉取不会无脑覆盖你的新代码。如果同一位置有冲突,需要你手动解决。

5.8 推送 Push

作用:把本地提交上传到远程仓库。

操作:

  1. 本地完成提交。
  2. 点击 推送
  3. 选择要推送的分支。
  4. 确认推送。

注意:

  • 没有提交的工作区修改不能直接推送。
  • 本地落后远程时,通常需要先拉取或变基。

6. 其他常用操作

6.1 书写忽略文件

.gitignore 用于指定哪些文件不需要 Git 管理。

示例:

Debug/
Release/
*.obj
*.exe
*.log
.vs/

注意:

.gitignore 只对未被跟踪的文件自动生效;已经提交过的文件需要停止跟踪。

6.2 停止跟踪

作用:文件已经被 Git 管理,后来不想继续让 Git 管理,但本地文件还保留。

命令理解:

git rm --cached 文件名

适用场景:

  • 误把编译输出文件提交进仓库。
  • 后来才把文件加入 .gitignore

6.3 创建补丁方式一:工作区补丁

作用:把当前未提交修改导出成补丁文件。

适用场景:

  • 不想提交,但想把修改发给别人。
  • 想把当前修改临时保存成文件。

命令理解:

git diff > working-tree.patch

注意:

新建的未跟踪文件需要先暂存,普通工作区补丁才容易包含它。

6.4 创建补丁方式二:提交补丁

作用:把某次提交导出成补丁文件。

命令理解:

git format-patch -1 HEAD

特点:

  • 会包含提交作者、时间、提交说明。
  • 适合把某个提交发给别人应用。

6.5 应用补丁方式一:git apply

作用:只应用补丁里的文件修改,不自动生成提交。

命令理解:

git apply working-tree.patch

适用场景:

  • 只想把别人改的内容应用到当前工作区。
  • 应用后自己检查,再决定是否提交。

6.6 应用补丁方式二:git am

作用:应用 format-patch 生成的提交补丁,并尽量保留原提交信息。

命令理解:

git am 0001-xxx.patch

适用场景:

  • 别人发来的是提交补丁。
  • 希望保留原提交说明和作者信息。

补丁注意事项:

补丁不是完整文件,而是修改差异。应用补丁时,当前代码和补丁生成时的上下文要接近,否则可能失败或生成 .rej 文件。

6.7 贮藏 Stash

作用:临时保存当前未提交修改,让工作区变干净。

适用场景:

  • 当前改了一半,需要临时切换分支。
  • 不想提交半成品代码。

常见流程:

贮藏 -> 切换分支处理事情 -> 回来应用贮藏

6.8 丢弃 Discard

作用:丢弃工作区未提交修改。

注意:

丢弃后修改通常很难找回,操作前确认不要这些改动。

适用场景:

  • 文件改错了,想恢复到上一次提交状态。
  • 临时调试内容不需要保留。

6.9 移除 Remove

作用:从仓库中删除文件。

区别:

操作 含义
丢弃 放弃未提交修改
移除 删除文件并让 Git 记录删除
停止跟踪 Git 不再管理文件,但本地保留

6.10 创建标签 Tag

作用:给某个提交节点打一个固定标记。

适用场景:

  • 标记版本发布。
  • 标记验收节点。

示例:

v1.0
basic-learn-done

6.11 删除标签

作用:删除不再需要或打错的标签。

注意:

  • 本地标签和远程标签可能需要分别删除。
  • 删除前确认标签不再需要。

7. 附加知识点

7.1 变基 Rebase

作用:把当前分支的提交移动到另一个分支最新提交之后,让提交历史更直。

示例:

合并 Merge:保留分叉和合并节点
变基 Rebase:把提交重新排列到最新节点后面

适用场景:

  • 本地功能分支想基于最新主分支继续开发。
  • 希望提交历史更整洁。

注意:

不要随便对已经推送并被别人使用的公共分支做 rebase,容易影响别人历史。

8. 综合最终状态

完成一系列操作后,理想状态是:

  • 工作区干净,没有未提交修改。
  • 当前分支清楚,例如在 masterdev
  • 本地提交已经按要求完成。
  • 远程仓库已经同步最新提交。
  • 冲突已经解决。
  • 不需要的临时文件已经忽略或停止跟踪。
  • 标签、补丁、贮藏等操作能说明用途和区别。

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. 资料来源