# 代码管理相关技术点



## Git

### 1.Git的概念

**Git** 是**分布式版本控制系统**的核心工具，用于**追踪文件变更、协调多人协作、保存代码历史快照**。

Git是目前世界上最先进的分布式版本控制系统，在处理各种项目时都十分高效，而且非常的高大上。

作为一个分布式版本控制系统来说，Git是没有中央服务器的，每个人的电脑就是一个完整的版本库，这样，工作的时候就不需要联网了，因为版本都是在自己的电脑上。例如我们一个小团队合作开发一个项目，我们可以先建立一个远程仓库，需求分析，搭建大体框架，将项目框架上传至远程仓库，队员可以git clone项目，各自完成自己负责的部分，完善项目等，写好之后还可以比对之前的版本，本地项目写好之后上传至远程仓库，出现错误还可以版本回退等等。

### 2.三个区域的概念

在 Git 中，**三个核心区域**构成了版本控制的核心框架，它们协同工作以实现精确的变更管理。

#### 2.1工作区

**定位**：本地磁盘可见的代码目录。

**本质**：开发者的实施编辑沙盒。

**特点**：所有的文件修改都在此处，状态通过git status查看。

#### 2.2暂存区

**定位**：git目录下的二进制索引文件。

**本质**：提交前的精准快速缓存区。

**特点**：解决了提交半成品代码的痛点。

#### 2.3本地仓库

**定位**：项目根目录下的.git隐藏文件夹。

**本质**：版本数据库，用来存储提交历史。

### 3.仓库的概念

Git 仓库（Repository）是 Git 版本控制系统的核心概念，用于存储项目文件及其完整版本历史。

仓库类型包括了本地仓库和远程仓库两种。

### 4.节点的概念

Git中的**节点**是版本控制的基础，通过提交对象记录项目状态，结合分支和HEAD指针实现高效的代码管理与协作。

节点的本质是**提交对象**，是版本的核心**控制单元**。

节点的组成有以下几部分：

1.**树对象**：指向当前快照的目录结构，记录文件的名称、权限和内容。

2.**父节点**：首次提交没有父节点，普通提交有一个，合并提交会有多个。

3.**元数据**：主要用来记录作者、提交者、时间戳和内容。

### 5.分支的概念

在Git中，**分支（Branch）** 是 **指向提交节点（Commit）的轻量级指针**，用于标记和管理不同的开发线路。其核心作用是允许开发者在并行线程中工作，而不会相互干扰。



## Source tree



### 1.Source tree的概念

Sourcetree 是一款由 Atlassian 开发的免费图形化版本控制客户端，主要用于管理 Git 和 Mercurial（Hg） 代码仓库。它通过直观的界面简化了版本控制操作。

### 1.仓库相关操作

#### 1.1创建本地仓库

首先，在电脑上建立一个文件夹，然后在软件内建立本地仓库，目标路径选择需要管理的文件夹路径，创建成功后，就可以对本地仓库进行管理。

<img src="./Pictures/image-20250708160913942.png" alt="image-20250708160913942" style="zoom:50%;" />

#### 1.2打开本地仓库

仓库创建完成后，在软件上方即可选择刚刚创建的仓库，打开之后，就可以对本地仓库进行管理了。

<img src="./Pictures/image-20250708160925365.png" alt="image-20250708160925365" style="zoom:50%;" />

#### 1.3克隆远程仓库

软件新建仓库时选择克隆，将需要克隆的远程仓库链接填入进来，同时选择克隆的路径，确定之后即可将远程仓库克隆到本地。

<img src="./Pictures/image-20250708160944832.png" alt="image-20250708160944832" style="zoom:50%;" />

#### 1.4获取

在软件内找到和远程仓库关联的仓库，选择上方的获取可以获得远程仓库。

从远程仓库复制到本地文件，但不会合并。

<img src="./Pictures/image-20250708161000682.png" alt="image-20250708161000682" style="zoom:50%;" />

#### 1.5关联远程仓库

软件内找到设置功能，添加远程仓库，进行关联。

<img src="./Pictures/image-20250708161023565.png" alt="image-20250708161023565" style="zoom:50%;" />

### 2.节点相关操作

#### 2.1提交

当本地仓库变动时，文件状态部分会显示需要提交，提交时应当补充变动内容或者能让自己看懂的语句，提交后，可在提交历史查看。

<img src="./Pictures/image-20250708161149061.png" alt="image-20250708161149061" style="zoom:50%;" />

#### 2.2 重置

重置是将本此更改内容取消的操作，本地修改过后，如果在软件的本地仓库内选择重置，则会对本地文件进行版本回退，回到修改前的版本。

<img src="./Pictures/image-20250708161204838.png" alt="image-20250708161204838" style="zoom:50%;" />

#### 2.3回滚提交

在提交历史中选择需要回退到的版本，选择回滚提交，则会将版本回退到想要返回的版本。

<img src="./Pictures/image-20250708161218765.png" alt="image-20250708161218765" style="zoom:50%;" />

### 3.分支相关操作

#### 3.1新建分支

对当前仓库想要进行其他操作，经常采用新建分支，新建分支可以在软件上面菜单栏点击创建，可以选择工作副本或者是新文件进行管理。

<img src="./Pictures/image-20250708161231708.png" alt="image-20250708161231708" style="zoom:50%;" />

#### 3.2合并分支

合并分支指将多个分支进行统一，或者将分支的内容同步至其他分支。

合并分为平行合并和变基合并，平行合并会将分支的内容一次性挪到主干，变基合并会将分支的提交一个一个合并到主干。

<img src="./Pictures/image-20250708161247753.png" alt="image-20250708161247753" style="zoom:50%;" />

#### 3.3删除分支

右键选择分支，直接删除即可。

<img src="./Pictures/image-20250708161301912.png" alt="image-20250708161301912" style="zoom:50%;" />

#### 3.4切换分支

直接左侧分支双击即可

<img src="./Pictures/image-20250708161314068.png" alt="image-20250708161314068" style="zoom:50%;" />

#### 3.5制造冲突

多个分支修改同一文件，同时将分支全部挪到主干时，会显示冲突。

#### 3.6解决冲突

1. 可以手动确认选择，同时在提交时右键标记为已解决即可。
2. 选择忽略。

#### 3.7拉取

可以将他人传送到云端的内容拉取到自己的设备上面并合并。

<img src="./Pictures/image-20250708161333241.png" alt="image-20250708161333241" style="zoom:50%;" />

#### 3.8推送

将本地内容推送到云端。

<img src="./Pictures/image-20250708161414737.png" alt="image-20250708161414737" style="zoom:50%;" />

### 4.其他

#### 4.1书写忽略文件

添加.gitignore 文件，可以将不想让仓库获取的文件写入里面。

#### 4.2停止跟踪

停止跟踪（Stop Tracking）是指将文件从 Git 仓库的版本控制中移除，但不会删除本地文件。这意味着这些文件将不再被 Git 跟踪和管理，但它们仍然保留在你的本地文件系统中。

#### 4.3创建补丁

提交列表中找到想要创建补丁的提交，右键即可创建补丁。

补丁（Patch）在软件开发中是一个记录代码变更的文本文件，它本质上是两个代码版本之间的差异（diff）。它的核心作用是精确、轻量地传递代码变更。

<img src="./Pictures/image-20250708161435985.png" alt="image-20250708161435985" style="zoom:50%;" />

#### 4.4删除补丁

直接右键删除即可。

#### 4.5贮藏

临时保存未提交的本地修改，让工作区恢复干净。但注意，应添加描述。

![image-20250711130022399](./../IAR/Pictures/image-20250711130022399.png)

#### 4.6丢弃

删除未提交的本地修改。

<img src="./../IAR/Pictures/image-20250711130039902.png" alt="image-20250711130039902" style="zoom:67%;" />

#### 4.7创建标签

标记提交。

<img src="./Pictures/image-20250708161540040.png" alt="image-20250708161540040" style="zoom:50%;" />

#### 4.8删除标签

右键删除标签即可。

