yuluo829 发表于 2022-1-16 13:49

Git&Github:版本控制工具

本帖最后由 yuluo829 于 2024-1-4 21:08 编辑

## Git&Github:版本控制工具


## 1:Git安装

Git的安装详解请移步至另一篇文章[**传送门**](https://blog.csdn.net/qq_52397471/article/details/116352474)
      

## 2:Github的本地结构:

                                       
1:工作区:写代码的地方      

```
通过`git add`命令将工作区文件上传到暂存区
```
2:暂存区:临时存储
                                                

```
通过'git commit'命令将暂存区文件上传至本地库
```
3:本地库:历史版本
      
      

## 3:初始化操作:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130245431.PNG)
本地库初始化:
```
git init
```

(本地化仓库后.git目录中存放的是本地库相关的子目录和文件,不要删除,修改)
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130324615.PNG)


## 4:设置签名:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130340669.PNG?)

      用户名:***
      Email地址:*********@****.com
      (设置的签名和登录远程仓库(代码托管中心)的账号,密码没有任何关系。)

      

## 5:命令

项目级别/仓库级别:仅在当前本地仓库范围内有效               
                        

```
git config user.name ***
git config uesr.email *****@***.com
**信息保存目录:当前项目./.git/config
```

系统用户级别:登录当前操作系统的用户范围               

```
git config --global user.name *****
git config --global uesr.email *****@***.com
信息保存位置:~/.gitconfig
```

级别优先级:

```
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有时不允许
```

## 6:进入当前项目文件夹
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021050213040816.PNG)
使用vim编辑一个C文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131147766.PNG)

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130514407.PNG?)


显示当前仓库信息(状态查看)      
      

```
git status      
```

               
添加文件至缓存区               
      
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130549590.PNG)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021050213061549.PNG)
```
git add + 文件名               
```
从暂存区撤回               
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130710524.PNG)
```
git rm --cached main.c
```
从暂存区提交至本地库      
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130857738.PNG)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130759331.PNG?)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502130917774.PNG)
```
git commit main.c
git commit -m "版本更改信息" 《文件名》
```
## 7:版本穿梭测试的准备:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131228634.PNG)
查看版本信息      
```
git log
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131310652.PNG)
以简介形式展示添加过的版本信息               
```
git log --pretty=oneline
```                        
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131320621.PNG)
以显示一部分哈希值展示      
```
git log --oneline
```
调出所有版本信息               
```
git reflog
```
版本的前进后退操作:

```
本质:是对HEAD指针的操作
```

1:基于索引值操作:

```
git reset --hard 【索引值】
```

2:使用^符号【只能后退】

```
git reset --hard <<<   (一个退一步,以此类推)
git reset --hard~3
```

3:使用~符号【只能后退】
                              

```
git reset --hard~3      (~3,后退3步)
```
reset参数区别:
                              

```
--soft                在本地库移动指针
--mixed                在本地库移动HEAD指针并且重置暂存区
--hard                在本地库移动指针,充重置暂存区和工作区
```

## 8:永久删除文件后找回

      前提                删除前,文件存在时的状态提交到了本地库
      删除                rm <文件名>
      找回                倒回到上一个版本,从而找回上一个版本文件
                        git reset --hard 【指针位置】
                        删除操作已经提交到本地库:指针位置指向历史记录
                        删除操作尚未提交到本地库:指针位置使用HEAD

## 9:比较文件差异:

               

```
git diff 《文件名》
```
将工作区的文件和暂存区的文件比较
      

```
git diff 【本地库中历史版本】【文件名】
```
将工作区中的各个文件和本地库历史文件比较
               
               

```
git diff
git diff HEAD
```
不带文件名比较多个文件

## 10:Git分支:
Git分支管理的本质是创建和移动指针

修复bug时,会创建一个hot_fix的分支,热修复在程序运行时进行维护

查看分支:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131638799.PNG)
```
git branch -v
```
创建一个新的分支
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131802403.PNG)

```
git branch hot_fix(***分支名)
```

切换分支
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502131839149.PNG)
```
git checkout <分支名>
```


合并分支:

```
      ①:切换到接受修改的分支(被合并,增加新内容)上
                              git checkout 【被合并分支名】
      ②:执行merge命令
                              git merge 【有新内容的分支】
```

解决冲突

```
                ①:编辑文件,删除特殊符号
                ②:把文件修改到你满意的程度,保存退出编辑器
                ③:git add【文件名】
                ④:git commit -m ”日志信息“
                        注意:此时commit一定不能带具体文件名
```

## 11:哈希算法(加密算法)

                特点:不管输入数据的数据量有多大,输入同一个哈希算法,加密结果长度固定
                哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
                哈希算法确定,输入数据确定,输出数据能够保持不变
                哈希算法不可逆
                Git底层采用的是SHA-1算法
                        在服务器端对文件用SHA-1算法运算。下载之后再次对文件进行运算,得到的输出数据一样,则证明文件传输过程中无数据丢失
      

## 12:注册Github账号创建远程仓库:

创建完成之后进入你创建的仓库会得到一个HTTP的网址,复制进入Git Bash
               
![在这里插入图片描述](https://img-blog.csdnimg.cn/202105021320130.PNG)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132033156.PNG)

```
git remote -v "地址别名" + 地址
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132050476.PNG)

## 13:推送操作:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132126192.PNG)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132138218.PNG?)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132208599.PNG?)
```
git push “仓库名” “分支名"
```
推送到github上之后:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132315277.PNG?)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021050213232994.PNG?)


## 14:克隆操作:

初始化本地库
完整的把远程库下载本地库
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210502132347228.PNG)
```
git clong + ”克隆时的远程库地址“
```

zxywan 发表于 2022-1-16 15:36

支持楼主。

jinzhu160 发表于 2022-1-16 16:11

lufeize 发表于 2022-1-16 17:23

楼主,传送门留的是不是有点问题呀,为啥跳转过去是写文章的界面呢?

夜不滚烫 发表于 2022-1-16 19:06

学到了哦挺好用的git之前都用的svn

Pandolar 发表于 2022-1-16 19:50

本帖最后由 Pandolar 于 2022-1-16 20:04 编辑

楼主你这个
Git的安装详解请移步至另一篇文章传送门
这把门传哪去了

你传一个CSDN的写文章编辑页?

ciker_li 发表于 2022-1-16 21:08

github现在基本打不开,请问怎么解决?

seatop 发表于 2022-1-16 22:03

留着学习,谢谢

niceniu666888 发表于 2024-1-2 14:42

马住了,用的时候看

yuluo829 发表于 2024-1-4 21:06

Pandolar 发表于 2022-1-16 19:50
楼主你这个

这把门传哪去了


sorry sorry 直接在 csdn 写的,我更正一下
页: [1] 2
查看完整版本: Git&Github:版本控制工具