Git工具系列合集-骨灰级


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


    教程目录:

    image-20220323103634151

    了解Git

    Git概述


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

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

    什么是版本控制?


    image-20220323104134804

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

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


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

    版本控制工具


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

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

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

    image-20220323104732128

    分布式版本控制工具

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

    image-20220323105228589

    git工作原理


    image-20220323110647413



    git命令


    git常用命令速览


    image-20220323111349625

    设置用户签名


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

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

    image-20220323111958801

    image-20220323111948566

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

    初始化工作区(本地库)


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

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

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

      image-20220323112553515

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

    查看本地库状态


    使用命令

    git status
    

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

    image-20220323112927800

    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,查看我们当前库的状态

    image-20220323123739780

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

    git add hello.txt
    

    image-20220323123841250

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

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

    image-20220323124014301

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

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

    git reflog
    

    image-20220323124125096

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

    git reset --hart 4c106c7
    

    image-20220323124345079

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

    image-20220323124409364

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

    image-20220323124504637

    可以看到我们现在的指针指向的是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

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

    image-20220323145733740

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

    合并分支


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

    git merge 需要添加的分支名称
    

    image-20220323160135824

    合并后的文件

    image-20220323160200734

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

    合并分支冲突怎么办?


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

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

    主分支-文件1:
    	你好
    	这个是我应该做的
    
    主分支-文件1(修改后):
    	你不好
    	这个是我应该做的
    
    提交之后显示1行添加1行删除,但是没有报错
    此时我们切换到子分支
    
    子分支-文件1:
    	你好
    	这个是我应该做的
    
    值分支-文件1(修改后):
    	你好
    	这个谁爱做谁做
    
    然后我们提交文件
    切换会主分支,选择合并
    
    就会出现错误
    

    image-20220323162457183

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

    image-20220323162547861

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

    image-20220323162716594

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

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

    正常添加文件进暂存区
    git add 文件1.txt
    
    不能加上名字,然后提交本地库
    git commit -m "合并冲突解决"
    

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

    image-20220323163040159

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

    git commit -m "合并冲突"
    

    image-20220323163120273

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

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




    使用github远程库


    团队内协作


    image-20220323163807435

    图片讲解

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

    跨团队协作

    image-20220323170935005

    图片详解

    对方可以使用fork将代码保存到自己的远程库中
    然后在自己的远程库里面使用clone和push等操作,等一切都做完之后
    
    使用pull requests,发起一个拉取请求,求求源代码的主人接受代码,然后代码的主人需要勉为其难的merge审核通过一下,才会保存到源代码的远程库下,成为正统
    

    新建一个仓库


    image-20220323171757304

    image-20220323172039089

    团队内协作


    用https来操作我们的远程库


    image-20220323172142715

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

    查看当前本地库的别名


    使用下面命令

    git remote -v
    

    image-20220323172355554

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

    创建一个别名


    使用下面命令

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

    在这里我们使用

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

    image-20220323172620338

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

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


    使用命令

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

    在这里我们使用

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

    image-20220323173303036

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

    使用命令

    git config --global http.sslVerify false
    

    image-20220323173411570

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

    从远程库拉取文件到目录


    我们使用命令

    git pull 链接或者链接的别名 分支
    
    我们这里直接使用
    git pull git-space master
    

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

    image-20220323173909939

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

    使用命令

    git clone 链接
    

    clone代码的时候不需要登陆

    clone代码干了3件事情

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

    这里不再演示

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


    image-20220323174514419

    image-20220323174534398

    被邀请方

    image-20220323174611342

    跨团队协作


    使用fork拷贝对方的远程库

    image-20220323175150822

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

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

    点击上面的Pull requests

    image-20220323175337167

    点击新建一个request

    image-20220323175414085

    确定创建

    image-20220323175502156

    填写信息

    image-20220323175532601

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

    image-20220323175610302

    image-20220323175623007

    确认无误之后同意回归

    image-20220323175802926

    image-20220323175820182

    使用SSH免密登陆


    image-20220323175941594

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

    生成一个SSH的key


    切换我们的目录到

    C:\Users\Administrator
    

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

    image-20220323180452848

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

    ssh-keygen -t rsa -C 邮箱
    

    此时我们输入

    ssh-keygen -t rsa -C 271374667@qq.com
    

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

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

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

    image-20220323180822646

    粘贴到我们得github中

    image-20220323180855558

    image-20220323180908232

    image-20220323180929128

    image-20220323181008659

    image-20220323181040563

    使用SSH拉取代码


    语法:

    git ssh链接 分支
    

    在这里我们输入

    git pull git@github.com:271374667/git-space.git master
    

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

    image-20220323182117067

    image-20220323182145535

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

    出现22端口报错怎么办?


    image-20220323181907290

    image-20220323181949163

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

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

    使用SSH来push代码到远程库


    使用命令

    git push ssh链接 分支
    

    这里我们使用

    git push git@github.com:271374667/git-space.git master
    

    image-20220323182449561




    使用国内的gitee(在vscode上)


    简介


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

    使用方法


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

    在vscode中的配置


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

    创建一个新的仓库


    image-20220323193658190

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

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

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

    随后我们输入我们的url

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

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

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

    相关