# GIT

### Git的概念

开源的分布式版本控制系统管理

### 三个区域的概念

​	**工作区**：在电脑中可以看到的目录

​	**暂存区**：临时存储区域，保留文件快照，提交之前保存在此。

~~~ 
git add filename       # 将单个文件添加到暂存区
git add .              # 将工作区中的所有修改添加到暂存区
git status             # 查看哪些文件在暂存区中
git commit -m "name"
~~~

​	**版本库**：每次提交都会保存新的快照，不可变。存放	在.git目录下index文件

### 仓库的概念

* 存放所有文件和历史记录

### 节点的概念

- （提交commit）是仓库中项目某个事件点快照，生成40位哈希值

### 分支的概念

- 开发过程中独立的分流线，本质是一个指向某个可提交的移动指针
- 通过创建分支实现功能开发，然后进行合并

**最好不要在主分支上直接操作**

~~~ bash
git branch name    #创建分支
git checkout name	#切换分支
或/
git switch  name

git merge new_name   #合并分支
git rebase new_name  #衍合并分支
~~~

#### marge

1. 将目标分支的所有提交**打包为单个新的合并**提交
2. 保留原始分支的完整历史记录
3. 创建**新的合并节点**（commit），这个节点有两个父节点

#### rebase

1. 将当前分支的所有提交**按顺序重演**到目标分支的最新提交之后
2. **修改提交历史**：创建全新的提交序列
3. 不会产生合并提交节点

* 只对**本地**未推送的分支使用rebase
* 个人分支与主分支同步

出现冲突选择保留与剔除

#### 分支操作

~~~ bash
#相关操作
git branch  #查看分支
git branch  name  #创建分支
git checkout name #切换分支


# 设置上游分支（第一次推送时）
git push -u origin 分支名

# 之后就可以简化命令
git pull
git push

#再次此之前贮藏暂存文件防止冲突
git stash
~~~



### 其他

####  回退版本

##### 

~~~ bash
git status  

git status 哈希值  #回退节点
~~~

#### 贮藏（Stash）更改（拉取更新时使用）

~~~ bash
# 贮藏所有修改（包括未跟踪文件）
git stash -u

# 查看贮藏列表
git stash list

# 应用最近贮藏（保留贮藏记录）
git stash apply
# 应用指定贮藏
git stash apply stash@{1}

# 应用并删除贮藏（常用）
git stash pop

# 删除贮藏
git stash drop "stash@{0}
~~~

#### 编写忽略文件（.gitignore）

~~~ bash
# 忽略单个文件
config.ini

# 忽略整个目录
.vscode/
node_modules/

# 忽略特定类型文件
*.log
*.tmp

# 忽略特定文件但包含例外
!important.log
~~~

#### 标签

~~~ bash
# 创建轻量标签（无注释）
git tag v1.0.0
#删除标签
git tag -d v1.0.0

# 创建附注标签（推荐）
git tag -a v1.2.0 -m "稳定版本发布"

# 为历史提交打标签
git tag -a v0.9.0 commit_hash -m "历史版本"

# 推送标签到远程
git push origin --tags
~~~

### 命令表

![命令表](pictures/图片1.png)

## sourceTree

概念：图形化操作显示



<img src="pictures/图片2.png" alt="图示" style="zoom:60%;" />

#### 标签

可以进行版本发布，压缩下载

![](pictures/图片4.png))

