Git工具系列合集-骨灰级

  • 了解课程
  • 了解Git
    • Git概述
      • 什么是版本控制?
      • 为什么我们需要版本控制?
    • 版本控制工具
      • 集中式的版本控制工具介绍
      • 分布式版本控制工具
    • git工作原理
  • git命令
    • git常用命令速览
    • 设置用户签名
    • 初始化工作区(本地库)
    • 查看本地库状态
    • 往暂存区里面添加文件
    • 从暂存区里删除文件
      • 如果我不加-m直接提交
      • 使用-m带参数提交
    • 查看我们的日志信息
    • 版本穿梭
      • 更新文件后进行版本穿梭演示
  • git分支
    • 什么是分支?
    • 操作分支的操作览
    • 创建一个分支
    • 查看我们的分支
    • 切换分支
    • 在分支里面修改文件并且上传文件库
    • 合并分支
    • 合并分支冲突怎么办?
      • 如果我在提交的时候还是加上了提交文件的名字会发生什么?
  • 使用github远程库
    • 团队内协作
    • 跨团队协作
    • 新建一个仓库
    • 团队内协作
      • 用https来操作我们的远程库
        • 查看当前本地库的别名
        • 创建一个别名
        • 把我们的代码发送到远程库
          • 出现了证书错误?
        • 从远程库拉取文件到目录
        • 从远程库里完整下载文件到本地库
      • 如果想要多人协作需要先邀请对方
    • 跨团队协作
      • 使用fork拷贝对方的远程库
      • 把迭代后的代码回归原工程
    • 使用SSH免密登陆
      • 生成一个SSH的key
      • 使用SSH拉取代码
        • 出现22端口报错怎么办?
      • 使用SSH来push代码到远程库
  • 使用国内的gitee(在vscode上)
    • 简介
    • 使用方法
    • 在vscode中的配置
      • 创建一个新的仓库

了解课程


教程目录:

Git工具系列合集-骨灰级_第1张图片

了解Git

Git概述


Git是一个免费开源的分布式版本控制系统

Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作
流分支等特性。其性能优于Subversion. CVS、Perforce 和ClearCase等版本控制工具。

什么是版本控制?


Git工具系列合集-骨灰级_第2张图片

如果遇到了这种情况,我们就需要使用到版本控制

为什么我们需要版本控制?


当团队协作开发代码的时候,我们需要有一个版本控制工具,统一合并每一个人的代码,而且保存每一个人分支的信息和提交的时间这个时候,GIT工具就是必须而且必要的了

版本控制工具


集中式的版本控制工具介绍

CVS、SVN(Subversion). VSS......
集中化的版本控制系统诸如CVS. SVN等,都有一个单一的集中管理的服务器,保存
所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或
者提交更新。多年以来,这已成为版本控制系统的标准做法。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什
么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要
远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕
机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

Git工具系列合集-骨灰级_第3张图片

分布式版本控制工具

Git、Mercurial、 Bazaar、 Darcs.....
像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码
仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用
其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次
对整个文件仓库的完整备份。。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

image-20220323105228589

git工作原理


Git工具系列合集-骨灰级_第4张图片



git命令


git常用命令速览


Git工具系列合集-骨灰级_第5张图片

设置用户签名


安装好git之后,我们的右键菜单里面就多出了一个git选项,此时我们点击git Bash Here进入设置签名

使用git config命令设置用户名和邮箱

image-20220323111958801

image-20220323111948566

这个用户名和邮箱是为了区分用户之间提交的,必须要设置,不然无法提交代码

初始化工作区(本地库)


寻找到一个我们要作为工作区的目录,之后的每一次内容修改都会提交一次备份

  1. 首先我们需要找到一个这样的目录,然后在目录下面右键打开我们的git

  2. 在目录下面输入初始化命令的代码git init

    image-20220323112553515

  3. 此时在我们的目录下面会生成一个隐藏的.git目录

查看本地库状态


使用命令

git status

就可以查看当前本地库的状态

Git工具系列合集-骨灰级_第6张图片

On brance master 表示我们当前所处的分支

No commits yet 表示我们当前还没有提交过任何一次信息

nothing to commit 表示我们当前这个目录下的文件,如果有文件会提示可以提交,现在提示没有文件可以提交,因为我们这个目录是空的

此时我们创建一个hello.txt文件,并且在里面写上hello world

image-20220323113149952

这个时候我们再使用git status命令查看我们的本地库

image-20220323113254849

往暂存区里面添加文件


可以看到我们的第三行变了,大概意思就是多出了一个没有被追踪的文件,叫hello.txt,叫我们添加

此时我们可以使用

git add  文件名 // 把文件添加到暂存区

此时我们用下面这个命令就可以把文件添加进暂存区
git add hello.txt

此时我们再去查看我们本地库的状态就会发现我们的信息变了

image-20220323113622023

从暂存区里删除文件


如果我想要从暂存区删除文件怎么办?

此时可以使用命令

git rm --cached 文件名字

就可以删除一个暂存区内的文件

image-20220323114014154

可以看到,我们的hello.txt又变成了没有被追踪的状态

虽然我们删除了暂存区缓存,但是我们的本地文件是不会发生任何变化的


使用命令

git commit -m "日志信息" 文件名字

来提交我们的文件,这个地方的-m “日志信息”并非一定要填写,如果留空之后也会打开窗口让我们填写,所以为了方便我们还是在这个地方直接填写

如果我不加-m直接提交

image-20220323114535857

最终还是逃不掉要写日志……

使用-m带参数提交

image-20220323114948868

其中的4c106c7就是我们的版本号

此时我们再使用git status就可以看到

image-20220323115152363

查看我们的日志信息


git log

这个命令可以帮助我们看到最近的更改以及日志信息和由谁更改

image-20220323115333843

同时也可以使用我们的简短版命令,只看日志和版本号

git reflog

image-20220323115421880

版本穿梭


使用命令

git reset --hard 版本号

就可以穿梭到版本号所在的文件版本

如果使用这个命令,那么本地文件也会被更新,回退或者前进到版本号所在的文件版本

更新文件后进行版本穿梭演示


首先,修改我们的hello文档

image-20220323123658125

保存后退出

再次打开我们的git,查看我们当前库的状态

Git工具系列合集-骨灰级_第7张图片

可以看到,git提示我们,有一个文件被更新了,这个时候我们再执行之前提交文件的步骤

git add hello.txt

Git工具系列合集-骨灰级_第8张图片

现在已经添加到我们的暂存区了,这个时候我们再把它提交到本地库来生成版本号

git commit -m "这个是第二版" hello.txt

Git工具系列合集-骨灰级_第9张图片

这个时候我们就会看到,git提示我们,有一个文件发生了变化,现在新增了一行,删除了一行

我们使用命令查看我们的当前的版本日志

git reflog

image-20220323124125096

可以看到我们现在已经有两个版本了,同时我们的head指针指向了我们第二版,我们需要穿梭回去只需要更改我们的指针就可以了,这个时候我们使用指令

git reset --hart 4c106c7

image-20220323124345079

现在我们再去查看我们的文档信息

发现当前本地文件已经回滚到了第一次的更新前的样子
此时我们再去看看我们的git日志

可以看到我们现在的指针指向的是4c106c7,如果想要回到最新的版本,只需要重新使用命令让指针回到最新的版本号即可

git reset --hard 0c89054

image-20220323124612026

image-20220323124624365

可以看到我们现在又回滚回来了

git分支



什么是分支?


在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。

使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行

对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)。

操作分支的操作览


image-20220323143204436

创建一个分支


使用下面命令就可以创建一个分支

git branch 分支名

显示结果

Administrator@PC-20200712XYQF MINGW64 /e/git-space (master)
$ git branch custom

创建分支并不会有过多的显示

查看我们的分支


使用下面命令查看我们的分支

git branch -v

显示结果

image-20220323144110863

可以看到,我们现在多了一个名字叫custom的分支,而且复制了我们主分支的所有内容

切换分支


使用下面命令切换

git checkout 分支的名字

image-20220323144357746

可以看到当我们输入完指令之后,我们的括号内的分支已经变成了custom

image-20220323144457799

我们现在查看我们的分支,可以看到,当前custom分支变成了绿色

在分支里面修改文件并且上传文件库


修改一下我们的文本文件

image-20220323144803564

提交一下

image-20220323144907627

查看一下我们的日志

image-20220323145150094

我们这个时候还可以切换回去,如果切换回去,文件就会变成另一个分支上的文件

Git工具系列合集-骨灰级_第10张图片

可以看到,当我们切换的时候,文件也变了

合并分支


我们想要合并分支需要先站在需要合并的主分支上面合并其他分支
比如:如果你想要把custom分支合并到master主分支里面
你需要先切换到master分支里面,然后使用命令

git merge 需要添加的分支名称

image-20220323160135824

合并后的文件

image-20220323160200734

可以看到当前文件的内容被改变了

合并分支冲突怎么办?


实际上的开发环境里面,经常会出现合并分支冲突的情况,这种情况是怎么发生的呢?

当你的文件里面存在除了你文件修改内容外的其他修改内容,那么我们就会出现合并分支冲突,听起来很拗口,我们来看一个例子

主分支-文件1:
	你好
	这个是我应该做的

主分支-文件1(修改后):
	你不好
	这个是我应该做的

提交之后显示1行添加1行删除,但是没有报错
此时我们切换到子分支

子分支-文件1:
	你好
	这个是我应该做的

值分支-文件1(修改后):
	你好
	这个谁爱做谁做

然后我们提交文件
切换会主分支,选择合并

就会出现错误

image-20220323162457183

自动合并错误,有多个地方被修改,我们的git不知道该合并哪一个,这个时候我们再打开文件看看,发现文件变成了这样

Git工具系列合集-骨灰级_第11张图片

此时我们可以看到冲突为什么发生,此时我们选择需要保留的内容,然后删除其他多余的=,>,<让文本变成这样

image-20220323162716594

这里我选择保留下一句(当然你两个都保留也是可以的)

注意,这个时候,我们需要再提交文件,但是不能在提交本地库的时候加上文件名字

正常添加文件进暂存区
git add 文件1.txt

不能加上名字,然后提交本地库
git commit -m "合并冲突解决"

如果我在提交的时候还是加上了提交文件的名字会发生什么?

image-20220323163040159

没有合并成功,并且报错了,此时我们需要输入

git commit -m "合并冲突"

image-20220323163120273

可以看到,此时我们就合并成功了

同时,我们合并后只会修改主分支,子分支不会收到影响




使用github远程库


团队内协作


image-20220323163807435

图片讲解

push 把本地库上传到远程库
clone 把远程库的内容下载到本地
pull 把远程库的内容拉取到本地(类似合并分支,不会下载全部)

跨团队协作

Git工具系列合集-骨灰级_第12张图片

图片详解

对方可以使用fork将代码保存到自己的远程库中
然后在自己的远程库里面使用clone和push等操作,等一切都做完之后

使用pull requests,发起一个拉取请求,求求源代码的主人接受代码,然后代码的主人需要勉为其难的merge审核通过一下,才会保存到源代码的远程库下,成为正统

新建一个仓库


Git工具系列合集-骨灰级_第13张图片

Git工具系列合集-骨灰级_第14张图片

团队内协作


用https来操作我们的远程库


Git工具系列合集-骨灰级_第15张图片

因为链接太长了,同时不方便我们记忆和输入,所以我们可以给链接一个别名,这样我们之后都可以使用别名来快速的代指这个链接

查看当前本地库的别名


使用下面命令

git remote -v

image-20220323172355554

可以看到此时我们还没有别名

创建一个别名


使用下面命令

git remote add 别名(建议和本地库同名) 链接地址

在这里我们使用

git remote add git-space https://github.com/271374667/git-space.git

Git工具系列合集-骨灰级_第16张图片

此时,我们可以看到,现在已经有两个别名(一个推送一个拉去)

把我们的代码发送到远程库


使用命令

git push 链接或者链接的别名 分支

在这里我们使用

git push git-space master
出现了证书错误?

image-20220323173303036

这个时候只需要重新配置一下git的配置,把证书验证给关了

使用命令

git config --global http.sslVerify false

此时,就会弹出一个方框让我们登陆

从远程库拉取文件到目录


我们使用命令

git pull 链接或者链接的别名 分支

我们这里直接使用
git pull git-space master

拉取的动作会自动帮我们提交本地库

image-20220323173909939

从远程库里完整下载文件到本地库

使用命令

git clone 链接

clone代码的时候不需要登陆

clone代码干了3件事情

  1. 下载完整代码
  2. 初始化本地库
  3. 创建别名

这里不再演示

如果想要多人协作需要先邀请对方


Git工具系列合集-骨灰级_第17张图片

被邀请方

Git工具系列合集-骨灰级_第18张图片

跨团队协作


使用fork拷贝对方的远程库

image-20220323175150822

这个时候,其他人就可以在自己的远程库里使用pull和push

把迭代后的代码回归原工程

点击上面的Pull requests

image-20220323175337167

点击新建一个request

Git工具系列合集-骨灰级_第19张图片

确定创建

image-20220323175502156

填写信息

Git工具系列合集-骨灰级_第20张图片

此时,原代码的工程那边就能看到一个pull requests

image-20220323175610302

image-20220323175623007

确认无误之后同意回归

image-20220323175802926

Git工具系列合集-骨灰级_第21张图片

使用SSH免密登陆


可以看到,此时我们还没有SSH配置公钥

生成一个SSH的key


切换我们的目录到

C:\Users\Administrator

然后在这个目录下面打开我们的git图形界面

使用命令,注意这个-C是大写的C

ssh-keygen -t rsa -C 邮箱

此时我们输入

ssh-keygen -t rsa -C [email protected]

然后什么都不用管,连续敲三次回车

此时现在就生成了一个.ssh文件

打开我们的id_rsa.pub 然后复制里面所有的内容

image-20220323180822646

粘贴到我们得github中

image-20220323181008659

image-20220323181040563

使用SSH拉取代码


语法:

git ssh链接 分支

在这里我们输入

git pull [email protected]:271374667/git-space.git master

此时出现窗口,询问我们是否保存,方便之后登陆,我们选择yes

Git工具系列合集-骨灰级_第22张图片

可以看到我们现在已经成功的通过ssh来免密登陆并且获取内容了

出现22端口报错怎么办?


image-20220323181907290

vim ~/.ssh/config
Host github.com
  Hostname ssh.github.com
  Port 443

输入完记得输入:wq来保存并且退出

使用SSH来push代码到远程库


使用命令

git push ssh链接 分支

这里我们使用

git push [email protected]:271374667/git-space.git master

image-20220323182449561




使用国内的gitee(在vscode上)


简介


gitee是中国内的代码托管平台,所以速度会比github快很多,也不会出现突然之间暴毙或者登陆补上的情况

使用方法


如果你使用git自带的界面,那么操作和之前是一样的,只不过创建仓库之后的链接会发生变化,但是我们现在主要讲的不是这个,而是在vscode中的配置

在vscode中的配置


我们在vscode中可以直接登录到github,但是因为github是一个外国的网站,所以网速很慢,而且有的时候还时不时的会崩坏,但是没关系,我们现在可以快速的在vscode里面使用我们的gitee,甚至就和上传到github一样简单

创建一个新的仓库


Git工具系列合集-骨灰级_第23张图片

比如我这里新建了一个仓库名字叫做git-tutorial

然后点击仓库之后复制我们的https

在vscode的远程库里添加一个远程库

随后我们输入我们的url

注意,这个地方会要求我们输入库的名字

请不要随意输入,会导致上传失败,经过测试origin是一个可用 的名字

随后就可以开始使用了,在vscode上面使用git非常的简单便捷,而且高效

你可能感兴趣的:(Git工具系列合集-骨灰级)