# 代码管理相关知识点
## Git
- Git的概念

  Git是一个开源的分布式版本控制系统，它能够高效地处理从小到大的项目。

- 三个区域的概念

  - 工作区

    平时存放项目的地方，可以在工作区直接修改。

  - 暂存区

    用于临时存放改动，保存即将提交的文件列表信息。

  - 仓库区（版本库）

    就是安全存放数据的位置，这里面有提交到所有版本的数据（版本快照）。

- 仓库的概念

  - Git仓库是存储文件和历史记录的地方。

- 节点的概念

  是Git中的基本概念，它代表着代码库的一个特定状态。每当你在Git中提交代码时，都会创建一个新的节点来保存当前代码库的状态。每个节点都有一个唯一的标识符，即SHA-1哈希值，用来标识该节点的内容和父节点。

- 分支的概念

  是基于节点的一个引用，它指向一个节点作为该分支的起点。通过创建分支，可以在代码库中开发新的功能、修复bug或实施其他更改，而不会影响原始分支。每个分支都有一个名称，通常用来描述该分支的目的或特点。分支之间可以相互合并，通过合并可以将不同分支上的更改合并到一起。

- 文件的状态

  - 已修改：文件内容已经被修改。
  - 已删除：文件本身已经被删除（工作区删除，存储区还有）。
  - 变    更：文件本身没有修改，但是改变了存放位置。
  - 未管理：尚未添加到版本管理的文件，比如新添加的文件。
  - 忽    略：不需要添加到版本管理的文件。
  - 冲    突：合并的时候同时修改了同一块的内容，所有需要人为取解决冲突。


## SourceTree
- SourceTree的概念

  - SourceTree 是 Windows 和Mac OS X 下免费的 **Git 客户端，**拥有可视化界面，容易上手操作。

- 仓库相关操作

  - **创建本地仓库**

    ![image-20250708170825330](./pictures/image-20250708170825330.png)

  -  **打开本地仓库**

    ![image-20250708170902654](./pictures/image-20250708170902654.png)

  - **克隆远程仓库**

    ![image-20250708171125862](./pictures/image-20250708171125862.png)

  - **获取**

    ​	获取是从远程仓库获取信息并同步至本地仓库（获取只会同步到本地仓库，不会更改工作文件）

    ![image-20250709090736034](./pictures/image-20250709090736034.png)

  -  **关联远程仓库**

  - ![image-20250708192038104](./pictures/image-20250708192038104.png)

- **节点相关操作**

  - **提交** ：将工作区的内容放到仓库的这个过程叫做提交。将写完后的文档先添加到暂存区，然后再写日志提交。每一次提交产生一个节点。![image-20250708175643517](./pictures/image-20250708175643517.png)![image-20250708181530873](./pictures/image-20250708181530873.png)

  -  **重置**（将修改后在未暂存区的东西，恢复修改前的版本）

    ![image-20250708181118121](./pictures/image-20250708181118121.png)

  - **回滚提交**：是指将改动的代码提交到本地仓库，但未推送到远端仓库的时候

  -  **重置当前分支到此次提交**：是指将改动的代码提交到本地仓库后，并已推送到远端仓库的时候

- **分支相关操作**

  - **新建分支**：创建的分支和主分支是完全一样的东西，新建分支旁边有圈代表分支激活，东西保存在该分支当中。

    ![image-20250708182630161](./pictures/image-20250708182630161.png)

  -  **合并分支**

    激活master，选择要合并的支线，点击确定，将支线的所有变化的节点打包创建一个新节点合并过去。

    ![image-20250708183742264](./pictures/image-20250708183742264.png)

    ![](./pictures/image-20250708183826186.png)![image-20250708184116528](./pictures/image-20250708184116528.png)

    - 变基

      ![image-20250708184441709](./pictures/image-20250708184441709.png)

      以分支为基合并到master里面

      ![image-20250708184812262](./pictures/image-20250708184812262.png)

      将之前的提交合并后再并入master

      ![image-20250708185604586](./pictures/image-20250708185604586.png)

  -  **删除分支**

    第一步先激活主分支

    ![image-20250708184916183](./pictures/image-20250708184916183.png)·	

    

  -  **切换分支**

    双击分支名字,出现小圆圈为激活状态。

  -  **制造冲突**

    ![image-20250708190410001](./pictures/image-20250708190410001.png)

  - **解决冲突**

    在需要提交的文件里面自己手动保留要更改的内容，然后鼠标右键选择已经解决冲突。还有一种方式是以我为准就是保存master的，以别人为准就是合并时候保存分支的。

  -  **拉取**

    选择从远端仓库中哪个分支获取。

    ![image-20250708193822773](./pictures/image-20250708193822773.png)

  -  **推送**

    选择要发送到远端仓库的分支，点击推送。

    ![image-20250708193624574](./pictures/image-20250708193624574.png)

- 其他

  - 书写忽略文件

    ![image-20250708191109627](./pictures/image-20250708191109627.png)或者在这个隐藏文件中添加忽略的东西，可以是精确文件名，也可以是某一类后缀如*.txt,或者某个文件夹下的文件如/abc

    ![image-20250708191157488](./pictures/image-20250708191157488.png)

  -  停止跟踪

    ![image-20250708194308960](./pictures/image-20250708194308960.png)

    停止跟踪后就不在受到版本管控

  -  创建补丁

    ![image-20250708201504400](./pictures/image-20250708201504400.png)

  -  应用补丁

    ![image-20250708201320222](./pictures/image-20250708201320222.png)

  -  贮藏

    ![image-20250708200138749](./pictures/image-20250708200138749.png)贮藏相当于保留这一次更改到贮藏区域，但是不提交，以后的更改还是争对上一次提交。

  -  __丢弃__:放弃之前修改的文件，恢复上一次提交状态

    ![image-20250708195933808](./pictures/image-20250708195933808.png)

  -  **移除**:(直接删除文件)

    ![image-20250708195200903](./pictures/image-20250708195200903.png)

  -  创建标签：（方便快速找到）

    ![image-20250708194852689](./pictures/image-20250708194852689.png)

  -  删除标签

    ![image-20250708195022006](./pictures/image-20250708195022006.png)

  