Git 命令

## 一：安装和配置
#### 1.安装及查看版本号
https://git-scm.com/
```java
git -v
```
#### 2.配置
#### ①配置用户名和邮箱(只需要执行一次)
```java
git config --global user.name Silence20240313
git config --global user.email liangxiaoli378@gmail.com
```
#### ②保存用户名和密码
```java
git config --global credential.helper store
```
#### ③查看git的配置信息
```java
git config --global --list
```
## 二：新建仓库
#### 1.方式一:git init
①新建文件夹:learn-git
②在此文件夹下打开命令行
```java
// 新建文件夹
mkdir learn-git

// 进入文件夹
cd learn-git

// 把当前文件夹变成git仓库
git init

// 当前目录下的文件全部展示出来
ls -a 或者  ls -altr 或者 ls -ltr
```
#### 2.方式二:克隆已有仓库
仓库地址：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/abf8a2e2-78b0-d229-3e64-4cfc9650c1b3.png)
```java
git clone 仓库地址
```
## 三：工作区域和文件状态
#### 1.工作区域
工作区：实际操作的目录
暂存区：临时存放即将提交的修改内容
本地仓库：Git存储代码和版本信息的位置
#### 2.文件状态
未跟踪：新创建的，还没有被git管理起来的文件
未修改：已经被git管理起来,但文件的内容没有发生变化
已修改：已经修改的文件，还没有添加到暂存区里
已暂存：修改之后已经添加到暂存区里
## 四：添加和提交文件
#### 1.查看仓库的状态 git status
查看当前仓库处在哪个分支，有哪些文件，以及这些文件当前处在怎样的状态
#### 2.添加到暂存区 git add .
#### 3.提交 git commit -m "提交的信息"   
只提交暂存区中的内容，不会提交工作区中的内容
```java
// 查看文件内容(文件名)
cat file1.txt

// 将文件添加到暂存区 
git add file1.txt
// 把txt文件一起添加到暂存区 
git add *.txt
// 添加所有文件到暂存区 .表示当前目录
git add .

// 提交
 git commit -m "提交的信息"

// 查看提交信息
git log 或者 git log --oneline
```
## 五： git reset回退版本
#### 1.git reset --soft ＋要回退的版本id  
回退到某一个版本，并且保留工作区和暂存区的所有修改内容
#### ⭐2.git reset --hard（常用）＋要回退的版本id
回退到某一个版本，并且丢弃工作区和暂存区的所有修改内容
#### 3.git reset --mixed ＋要回退的版本id
回退到某一个版本，并且只保留工作区的修改内容，而丢弃暂存区的修改内容
#### 4.查看操作历史记录
```java
git reflog
```
## 六：使用git diff查看差异
#### 1.git diff
比较工作区和暂存区之间的差异
#### 2.git diff HEAD
比较工作区和版本库之间的差异
#### 3.git diff --cached
比较暂存区和版本库之间的差异
#### 4.git diff ＋想要比较的两个版本的提交id
比较两个特定版本之间的差异
#### 5.git diff 版本的提交id HEAD 
提交的id和HEAD进行比较
#### 6.git diff HEAD~ HEAD 
当前版本和上一个版本(HEAD~)之间的差异
⭐HEAD^ ＝ HEAD~   HEAD~2：HEAD之前的第二个版本
#### 7.git diff 文件名 
查看这个文件的差异内容
## 七：使用git rm 从版本库中删除文件
直接删除文件然后提交
```java
git rm -r --cached 文件夹名称/
```
## 八：.gitignore忽略文件
应该忽略哪些文件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3899383/7f9cc1cf-d567-0644-74c4-ff33a730d569.png)
①系统或者软件自动生成的文件
②编译产生的中间文件和结果文件
③运行时生成日志文件，缓存文件，临时文件
④涉及身份，密码，口令，密钥等敏感信息文件
⭐新建工程后，在工程下新建一个.gitignor的文件，把不需要上传到仓库的文件（路径加文件名）添加到里面
比如：a.log不需要上传到仓库，那么在.gitignor文件中
```java
   ./resoure/a.log
```
批量添加log文件到.gitignor文件中
```java
   ./resoure/*.log
```
## 九：SSH配置和克隆仓库
在上传代码，下拉代码，克隆仓库时需要配置SSH密钥，只需要配置一次即可。
#### 1.配置SSH密钥
```java
// 先进入家目录，查看有无.ssh文件夹，若无，则执行①，若有则执行②
cd ~
ls -a

// ①生成密钥文件
ssh-keygen -t rsa -b 4096
// 私钥文件id_rsa  公钥文件id_rsa.pub
// 查看公钥文件
cat id_rsa.pub

// ②进入ssh
cd .ssh
ls -a

// 把公钥添加到github上：在github主页-头像-设置-左侧：ssh and gpg keys中，新建ssh密钥按钮，把公钥文件复制进来（标题输入任意名字）

// 至此SSH密钥配置成功
```
#### 2.克隆远程仓库到本地
```java
git clone 仓库地址
```
#### 3.把远程仓库的修改拉取到本地仓库
```java
git pull
```
#### 4.把本地仓库的修改推送给远程仓库
```java
git push
```
## 十：关联本地仓库和远程仓库
```java
// 新建的远程仓库和本地已有的仓库建立联系:新建远程仓库后生成的三行代码
git remote add origin https://github.com/Silence20240313/learn-git.git
git branch -M main
git push -u origin main

// 查看远程仓库
git remote -v
```
## 十一：分支简介和基本操作
#### 1.查看分支列表
```java
git branch
```
#### 2.创建分支
```java
git branch 分支名
```
#### 3.切换分支
```java
git checkout 分支名
// 推荐
git switch 分支名
```
#### 4.合并分支
```java
git merge 分支名
```
#### 5.删除分支
```java
// 已合并
git branch -d 分支名
// 未合并
git branch -D 分支名
```
## 十二：解决合并冲突
两个分支修改了同一个文件的同一处位置：产生冲突
解决办法：
①手工修改冲突文件，合并冲突内容
②添加暂存区
```java
git add file
```
③提交修改
```java
git commit -m "message"
```
⭐中止合并
```java
git merge --abort
```
⭐Merge
只是合并，不关心提交历史
优点:不会破坏原分支的提交历史，方便回溯和查看
缺点：会产生额外的提交节点，分支图比较复杂
## 十三：回退和rebase
```java
git rebase 分支名
```
⭐Rebase
自己在一个分支上开发，希望提交记录清晰明了
优点：不会新增额外的提交记录，形成线性历史，比较直观和干净
缺点：会改变提交历史，改变了当前分支branch out的节点。避免在共享分支使用。