目的:快速掌握 Git 基础概念和 SourceTree 常用操作,能够完成基础学习中的代码管理考核。
Git 是一个分布式版本控制工具,用来记录代码每一次修改,方便回退、对比、分支开发和多人协作。
一句话:
Git 负责记录代码历史,SourceTree 是 Git 的图形化操作工具。
| 区域 | 含义 | SourceTree 中的表现 |
|---|---|---|
| 工作区 | 当前正在编辑的文件 | 未暂存文件 |
| 暂存区 | 准备提交的文件 | 已暂存文件 |
| 本地仓库 | 已经提交保存的历史记录 | History/日志中的提交节点 |
常用流程:
修改文件 -> 暂存 -> 提交 -> 推送
仓库是 Git 管理代码历史的目录,里面有一个隐藏的 .git 文件夹。
注意:
不要手动删除
.git文件夹,否则仓库历史会丢失。
节点就是一次提交记录,也叫 commit。
每个节点通常包含:
分支是独立开发线,用于在不影响主线的情况下开发功能。
常见分支:
master/main:主分支。dev:开发分支。feature_xxx:功能分支。一句话:
分支用于并行开发,合并用于把一个分支的修改整合到另一个分支。
SourceTree 是 Atlassian 提供的 Git 图形化工具,可以通过界面完成提交、分支、合并、拉取、推送、补丁、贮藏等操作。
常见区域:
| 区域 | 作用 |
|---|---|
| 文件状态 | 查看工作区和暂存区文件 |
| History/日志 | 查看提交节点历史 |
| 分支 | 查看和切换分支 |
| 远端 | 查看远程仓库分支 |
| 工具栏 | 提交、拉取、推送、获取、分支、合并等 |
作用:把一个普通文件夹变成 Git 仓库。
操作:
创建。结果:
目录中生成 .git 文件夹
作用:把已有 Git 仓库加入 SourceTree 管理。
操作:
添加 或 打开。作用:第一次从远程仓库完整下载代码和历史。
操作:
克隆。一句话:
克隆是第一次把远程仓库完整复制到本地。
作用:只获取远程最新提交信息,不自动修改本地工作文件。
理解:
Fetch = 看远程有没有新东西
适用场景:
作用:让本地仓库知道要连接哪个远程仓库。
操作:
origin。常用命令理解:
git remote add origin 仓库地址
作用:把暂存区内容保存成一个提交节点。
操作:
提交说明建议:
docs: update markdown note
fix: correct add function
feat: add login module
作用:把当前分支指针移动到某个历史提交。
常见类型:
| 类型 | 含义 |
|---|---|
| Soft | 保留修改到暂存区 |
| Mixed | 保留修改到工作区 |
| Hard | 丢弃提交后的修改,风险最高 |
考核记忆:
重置是改变当前分支指向,Hard Reset 会丢修改,操作前要确认。
作用:生成一个新的反向提交,用来抵消某次提交。
示例:
A -> B -> C
如果 B 有问题,对 B 执行回滚后:
A -> B -> C -> D
D 是新的反向提交,用来撤销 B 的修改。
重置和回滚区别:
| 操作 | 是否新增提交 | 是否改历史 |
|---|---|---|
| Reset | 不新增 | 会改变分支指针 |
| Revert | 新增反向提交 | 不破坏已有历史 |
作用:从当前节点创建一条新的开发线。
操作:
分支。feature/add-calc。作用:切换到另一条开发线。
操作:
注意:
如果当前工作区有未提交修改,切换分支可能失败,需要先提交、贮藏或丢弃。
作用:把另一个分支的修改合并到当前分支。
操作:
master。合并。一句话:
站在哪个分支上执行合并,修改就合并到哪个分支。
作用:删除不再需要的分支。
操作:
注意:
冲突通常发生在两个分支修改了同一个文件的同一位置。
练习方式:
master 修改 README.md 某一行并提交。feature 修改同一行并提交。master 合并 feature。操作:
冲突标记示例:
<<<<<<< HEAD
当前分支内容
=======
被合并分支内容
>>>>>>> feature
作用:获取远程更新并合并到当前分支。
理解:
Pull = Fetch + Merge
适用场景:
注意:
拉取不会无脑覆盖你的新代码。如果同一位置有冲突,需要你手动解决。
作用:把本地提交上传到远程仓库。
操作:
推送。注意:
.gitignore 用于指定哪些文件不需要 Git 管理。
示例:
Debug/
Release/
*.obj
*.exe
*.log
.vs/
注意:
.gitignore只对未被跟踪的文件自动生效;已经提交过的文件需要停止跟踪。
作用:文件已经被 Git 管理,后来不想继续让 Git 管理,但本地文件还保留。
命令理解:
git rm --cached 文件名
适用场景:
.gitignore。作用:把当前未提交修改导出成补丁文件。
适用场景:
命令理解:
git diff > working-tree.patch
注意:
新建的未跟踪文件需要先暂存,普通工作区补丁才容易包含它。
作用:把某次提交导出成补丁文件。
命令理解:
git format-patch -1 HEAD
特点:
作用:只应用补丁里的文件修改,不自动生成提交。
命令理解:
git apply working-tree.patch
适用场景:
作用:应用 format-patch 生成的提交补丁,并尽量保留原提交信息。
命令理解:
git am 0001-xxx.patch
适用场景:
补丁注意事项:
补丁不是完整文件,而是修改差异。应用补丁时,当前代码和补丁生成时的上下文要接近,否则可能失败或生成
.rej文件。
作用:临时保存当前未提交修改,让工作区变干净。
适用场景:
常见流程:
贮藏 -> 切换分支处理事情 -> 回来应用贮藏
作用:丢弃工作区未提交修改。
注意:
丢弃后修改通常很难找回,操作前确认不要这些改动。
适用场景:
作用:从仓库中删除文件。
区别:
| 操作 | 含义 |
|---|---|
| 丢弃 | 放弃未提交修改 |
| 移除 | 删除文件并让 Git 记录删除 |
| 停止跟踪 | Git 不再管理文件,但本地保留 |
作用:给某个提交节点打一个固定标记。
适用场景:
示例:
v1.0
basic-learn-done
作用:删除不再需要或打错的标签。
注意:
作用:把当前分支的提交移动到另一个分支最新提交之后,让提交历史更直。
示例:
合并 Merge:保留分叉和合并节点
变基 Rebase:把提交重新排列到最新节点后面
适用场景:
注意:
不要随便对已经推送并被别人使用的公共分支做 rebase,容易影响别人历史。
完成一系列操作后,理想状态是:
master 或 dev。说明: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 |
关闭当前仓库标签页,部分版本支持 |
更稳的考核记法: