# 1. Git环境配置
## 1.1 基本配置
1. 打开Git Bash
2. 设置用户信息
```
git config --global user.name "yourname"
git config --global user.email "youremail@email.com"
```
3. 查看配置信息
```
git config --global user.name
git config --global user.email
```
## 1.2 常用命令配置别名
有些常用命令每次需要输入很多参数,比较长,这时我们可以使用别名。
1. 打开用户目录,创建```.bashrc```文件
2. 在```.bashrc```文件中输入以下内容
```
# 用于输出当前目录所有文件及其基本信息
alias ll="ls -al"
# 用于输出git提交的日志
alias git-log="git log --pretty=oneline --all --graph --abbrev-commit"
```
3. 打开Git Bash窗口,执行```source ~/.bashrc```使配置生效
## 1.3 解决Git Bash中文乱码问题
1. 在Git Bash中执行如下命令
```
git config --global core.quotepath false
```
2. 在```${git_home}/etc/bash.bashrc```文件最后加入下面两行
```
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
```
# 2. 创建本地仓库
要使用Git对我们的代码进行版本控制,首先需要创建本地仓库
1. 在我们电脑上的任意位置创建一个空的文件夹
2. 进入这个目录,右键打开Git Bash窗口
3. 执行```git init```命令
4. 如果创建成功,该目录下会生成一个```.git```文件夹
# 3. 基础操作指令
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化。

本章主要讲解如何使用命令来控制这些状态之间的转换:
```git add``` (工作区 --> 暂存区)
```git commit``` (暂存区 --> 本地仓库)
## 3.1 查看修改的状态(git status)
- 作用:查看修改的状态(暂存区、工作区)
- 命令形式:```git status```
## 3.2 添加工作区到暂存区(git add)
- 作用:添加工作区一个或多个文件的修改到暂存区
- 命令形式:```git add 单个文件名|通配符```
- 将所有修改添加到暂存区:```git add .```
## 3.3 提交暂存区到本地仓库(git commit)
- 作用:提交暂存区内容到本地仓库的当前分支
- 命令形式:```git commit -m "注释内容"```
## 3.4 查看提交日志(git log)
**在1.2节配置别名```git-log```就包含了这些参数,所以后续可以直接使用指令```git-log```**
- 作用:查看提交记录
- 命令形式:```git log [option]```
- option:
- ```--all ``` 显示所有分支
- ```--pretty=oneline``` 将提交信息显示为一行
- ```--abbrev-commit``` 使得输出的commit更简短
- ```--graph``` 以图的形式显示
## 3.5 版本回退
- 作用:版本切换
- 命令形式: ```git reset --hard commitID```
- ```commitID``` 可以使用```git-log```或```git log```指令查看
- 如何查看已经删除的记录?
- ```git reflog```
- 这个指令可以看到已经删除的提交记录
# 4. 分支
## 4.1 查看本地分支
命令:```git branch```
## 4.2 创建本地分支
命令:```git branch 分支名```
## 4.3 切换分支
命令:```git checkout 分支名```
我们还可以直接切换到一个不存在的分支(即创建并切换)
命令:```git checkout -b 分支名```
## 4.4 合并分支
一个分支上的提交可以合并到另一个分支
命令:```git merge 分支名```
## 4.5 删除分支
**不能删除当前分支,只能删除其他分支**
```
# 删除分支时,需要做各种检查
git branch -d 分支名
# 不做任何检查,强制删除分支
gti branch -D 分支名
```
## 4.6 解决合并冲突
当两个分支上对同一个文件进行修改后,在合并两个分支时可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突的步骤如下:
1. 处理文件中冲突的地方
2. 将解决完冲突的文件加入暂存区(add)
3. 提交到仓库(commit)
## 4.7 开发中分支使用原则和流程
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修复以及开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
- master(生产)分支
线上分支,即主分支,中小规模项目作为线上运行的应用所对应的分支。
- develop(开发)分支
从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发,并且没有不同期上线的要求时,都可以在此版本进行开发,阶段开发完成后,需要时,可以合并到master主分支,准备上线。
- feature/xxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后,合并到develop分支。
- hotfix/xxx分支
从master派生的分支,一般作为线上修复bug使用,修复完成后需要合并到master、develop和test分支。
- 还有一些其他的分支,在此不再赘述,如test分支(用于代码测试)、pre分支(预上线分支)等。

# 5. 操作远程仓库
## 5.1 添加远程仓库
**此操作是先初始化本地仓库,然后与已创建的远程仓库进行对接**
命令:```git remote add <远端名称> <仓库路径>```
- 远端名称,默认是origin,取决于远端服务器设置
- 仓库路径,从远端服务器获取此URL
例如:
```
git remote add origin git@gitee.com:zhangsan/test.git
```
## 5.2 查看远程仓库
命令:```git remote```
## 5.3 推送到远程仓库
命令:```git push [-f] [--set-upstream] [远端名称] [本地分支名]:[远程分支名]```
- 如果远程分支名和本地分支名相同,则可以只写本地分支名称。如:```git push origin master```
- ```-f``` 强制覆盖远程分支
- ```--set-upstream``` 推送到远端的同时建立起和远端分支的关联关系。如:```git push --set-upstream origin master```
- 如果当前分支已经和远程分支关联,则可以省略分支名和远端名称。如:```git push``` 将master分支推送到已关联的远程分支
## 5.4 本地分支与远程分支的关联关系
使用```git branch -vv```命令查看本地分支与远程分支的关联关系
## 5.5 克隆远程仓库
命令:```git clone <仓库路径> [本地目录]```
- 本地目录可以省略,会自动生成一个目录
## 5.6 从远程仓库中抓取和拉取
远程分支和本地分支一样可以进行merge操作,只是需要先把远程仓库的更新下载到本地,再进行操作。
- 抓取命令:```git fetch [remote name] [branch name]```
- **抓取命令就是将仓库里的更新都抓取到本地,但是不会进行合并**
- 如果不指定远端名称和分支名,则抓取所有分的支更新
- 拉取命令:```git pull [remote name] [branch name]```
- **拉取命令就是将远程仓库的修改拉到本地并自动进行合并,等同于```fetch+merge```**
- 如果不指定远端名称和分支名,则抓取所有并更新当前分支
# 总结

Git相关命令和用法