Git实操

Git

文章目录

  • Git
    • Git的概念
    • Git简史
    • Git的安装过程
    • Git结构
    • 代码托管中心_本地库和远程库的交互方式
    • 初始化本地仓库
    • Git常用命令
      • add和commit命令
      • status命令
      • **log命令**
      • log命令2
      • reset命令
      • hard参数/mixed参数/soft参数
      • 删除文件_找回本地库删除的文件
      • 找回暂存区删除的文件
      • diff命令
    • 分支
      • 什么是分支
      • 操作分支
        • 查看,创建,切换分支
        • 冲突问题,如何解决冲突题
    • GitHub账号注册
    • 回顾本地库和远程库交互方式
    • 初始化本地库
    • 创建远程库
    • 在本地创建远程库地址的别名
    • 推送操作
    • 克隆操作
    • 邀请加入团队,push操作
    • 远程库修改的拉取操作
    • 远程库修改的拉取操作2
    • 协同开发合作时冲突的解决办法
    • 回顾跨团队合作交互方式
    • 跨团队合作
    • SSH免密登录
    • IDEA集成Git
    • 本地库和远程库的交互
    • 使用IDEA克隆远程库到本地
    • 解决冲突
    • 如何避免冲突
    • 删除某一次对远程仓库的push

Git的概念

【1】Git技术:公司必备,一定要会

【2】Git概念:

Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。

【3】什么是版本控制?

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 。

【4】为什么要使用版本控制?

软件开发中采用版本控制系统是个明智的选择。

有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。

就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子。

但额外增加的工作量却微乎其微。你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

【5】版本控制系统的分类:

❀集中化的版本控制系统:

Git实操_第1张图片

集中化的版本控制系统诸如CVS, SVN 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客

户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法,这种做法带来了许多好处,现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统;要远比在各个客户端上维护本地数据库来得轻松容易。

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

❀分布式的版本控制系统

由于上面集中化版本控制系统的那些缺点,于是分布式版本控制系统面世了。

在这类系统中,像Git, BitKeeper 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。

Git实操_第2张图片

更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。这样,你就可以在同一个项目中分别和不同工作小组的人相互协作。

Git实操_第3张图片

分布式的版本控制系统在管理项目时存放的不是项目版本与版本之间的差异.它存的是索引(所需磁盘空间很少所以每个客户端都可以放下整个

项目的历史记录)

Git实操_第4张图片

Git简史

Git实操_第5张图片

Linux —> 人越来越多 ---->代码优化的越来越好 —》项目管理工具

—》Bitkeeper —》终止合作 —》一周Git --》一个月内将Linux管理在Git上—》开源,免费 —》用户群大

Git的安装过程

【1】Git官网:

https://git-scm.com/

【2】安装过程:

一直下一步

Git实操_第6张图片

Git实操_第7张图片

Git实操_第8张图片

Git实操_第9张图片

Git实操_第10张图片

Git实操_第11张图片

点击Git Bash Here打开Git终端:

Git实操_第12张图片

Git结构

Git实操_第13张图片

代码托管中心_本地库和远程库的交互方式

【1】代码托管中心是干嘛的呢?

我们已经有了本地库,本地库可以帮我们进行版本控制,为什么还需要代码托管中心呢?

它的任务是帮我们维护远程库,

下面说一下本地库和远程库的交互方式,也分为两种:

(1)团队内部协作

Git实操_第14张图片

(2)跨团队协作

在这里插入图片描述

【2】托管中心种类:

局域网环境下: 可以搭建 GitLab服务器作为代码托管中心,GitLab可以自己去搭建

外网环境下:可以由GitHub或者Gitee作为代码托管中心,GitHub或者Gitee是现成的托管中心,不用自己去搭建

初始化本地仓库

【1】创建一个文件夹:

在这里插入图片描述

【2】打开Git终端:

Git Bash Here:

进入以后先对字体和编码进行设置:

Git实操_第15张图片

在Git中命令跟Linux是一样的:

(1)查看git安装版本:

Git实操_第16张图片

(2)清屏:

Git实操_第17张图片

(3)设置签名:

设置用户名和邮箱:

在这里插入图片描述

在这里插入图片描述

(4)本地仓库的初始化操作:

在这里插入图片描述

.git目录是隐藏的:可以调出来查看:

在这里插入图片描述

查看.git下内容:

Git实操_第18张图片

注意事项: .git目录下的本地库相关的子目录和子文件不要删除,不要胡乱修改。

Git常用命令

add和commit命令

添加文件: add 提交文件:commit

展示:

【1】先创建一个文件:

Git实操_第19张图片

【2】将文件提交到暂存区:

在这里插入图片描述

【3】将暂存区的内容提交到本地库:

Git实操_第20张图片

注意事项:

在这里插入图片描述

(1)不放在本地仓库中的文件,git是不进行管理

(2)即使放在本地仓库的文件,git也不管理,必须通过add,commit命令操作才可以将内容提交到本地库。

status命令

git status看的是工作区和暂存区的状态

创建一个文件,然后查看状态:

Git实操_第21张图片

然后将Demo2.txt通过git add命令提交至:暂存区:

在这里插入图片描述

查看状态:

Git实操_第22张图片

利用git commit 命令将文件提交至:本地库
Git实操_第23张图片

现在修改Demo2.txt文件中内容:

Git实操_第24张图片

然后再查看状态:

Git实操_第25张图片

重新添加至:暂存区:

在这里插入图片描述

Git实操_第26张图片

然后将暂存区的文件提交到本地库:

在这里插入图片描述

提交完再查看状态:

Git实操_第27张图片

log命令

git log 可以让我们查看提交的,显示从最近到最远的日志

Git实操_第28张图片

log命令2

当历史记录过多的时候,查看日志的时候,有分页效果,分屏效果,一页展示不下:

Git实操_第29张图片

下一页:空格

上一页: b

到尾页了 ,显示END

在这里插入图片描述

退出:q

日志展示方式:

【1】方式1:git log —》分页

【2】方式2:git log --pretty=onelint

Git实操_第30张图片

【3】方式3:git --oneline

Git实操_第31张图片

【4】方式4:git reflog

多了信息:HEAD@{数字}

这个数字的含义:指针回到当前这个历史版本需要走多少步

在这里插入图片描述

reset命令

reset命令:前进或者后退历史版本

复制:在终端中选中就是复制了

粘贴: 右键:paste

Git实操_第32张图片

hard参数/mixed参数/soft参数

【1】hard参数:

git reset --hard [索引]

本地库的指针移动的同时,重置暂存区,重置工作区

Git实操_第33张图片

【2】mixed参数:

本地库的指针移动的同时,重置暂存区,但是工作区不动

Git实操_第34张图片

【3】soft参数:

本地库的指针移动的时候,暂存区,工作区都不动

Git实操_第35张图片

总结:以后用的多的就是 第一种hard参数

删除文件_找回本地库删除的文件

【1】新建 一个Test2.txt文件

【2】将它add到暂存区中

【3】再通过commit提交到本地库

Git实操_第36张图片

【4】删除工作区中的Test2.txt

在这里插入图片描述

【5】将删除操作同步到暂存区:

【6】将删除操作同步到本地库:

Git实操_第37张图片

【7】查看日志:

在这里插入图片描述

【8】找回本地库中删除的文件,实际上就是将历史版本切换到刚才添加文件的那个版本即可:

在这里插入图片描述

找回暂存区删除的文件

【1】删除工作区数据:

在这里插入图片描述

【2】同步到缓存区:

Git实操_第38张图片

【3】后悔了,恢复暂存区中数据:

Git实操_第39张图片

Git实操_第40张图片

diff命令

【1】先创建一个文件,添加到暂存区,再提交到本地库:

Git实操_第41张图片

【2】更改工作区中Test3.txt中内容,增加内容:

Git实操_第42张图片

导致:工作区 和 暂存区 不一致,比对:

Git实操_第43张图片

总结: git diff [文件名] —》 将工作区中的文件和暂存区中文件进行比较

多个文件的比对:

Git实操_第44张图片

总结:git diff —>比较工作区中和暂存区中 所有文件的差异

比较暂存区和本地库中差别:

git diff [历史版本][文件名] —》比较暂存区和本地库中内容

在这里插入图片描述

在这里插入图片描述

分支

什么是分支

【1】什么是分支:

在版本控制过程中,使用多条线同时推进多个任务。这里面说的多条线,就是多个分支。

【2】通过一张图展示分支:

Git实操_第45张图片

【3】分支的好处:

同时多个分支可以并行开发,互相不耽误,互相不影响,提高开发效率

如果有一个分支功能开发失败,直接删除这个分支就可以了,不会对其他分支产生任何影响。

操作分支

查看,创建,切换分支

【1】在工作区创建一个Test4.txt文件,然后提交到暂存区,提交到本地库:

Git实操_第46张图片

Git实操_第47张图片

【2】查看分支:

在这里插入图片描述

【3】创建分支:

在这里插入图片描述

再查看:

Git实操_第48张图片

【4】切换分支:

Git实操_第49张图片

冲突问题,如何解决冲突题

【1】进入branch01分支,增加内容:

Git实操_第50张图片

Git实操_第51张图片

【2】将分支切换到master:

Git实操_第52张图片

然后在主分支下 加入内容:

Git实操_第53张图片

在这里插入图片描述

【3】再次切换到branch01分支查看:

Git实操_第54张图片

【4】将branch01分支 合并到 主分支 :

(1)进入主分支:

Git实操_第55张图片

(2)将branch01中的内容和主分支内容进行合并:

Git实操_第56张图片

查看文件:出现冲突:

Git实操_第57张图片

解决:

公司内部商议解决,或者自己决定 人为决定,留下想要的即可:

Git实操_第58张图片

将工作区中内容添加到暂存区:

Git实操_第59张图片

然后进行commit操作:

Git实操_第60张图片

GitHub账号注册

官网:https://github.com/

Git实操_第61张图片

回顾本地库和远程库交互方式

Git实操_第62张图片

初始化本地库

Git实操_第63张图片

创建远程库

【1】创建远程库

Git实操_第64张图片

【2】录入信息:

Git实操_第65张图片

【3】完成状态:

Git实操_第66张图片

在本地创建远程库地址的别名

远程库的地址:

Git实操_第67张图片

点击进入:

Git实操_第68张图片

远程库地址比较长,每次复制比较麻烦

https://github.com/zhaoshanshan3366/GitResp2.git

在Git本地将地址保存,通过别名

查看别名:

在这里插入图片描述

起别名:

在这里插入图片描述

在这里插入图片描述

推送操作

Git实操_第69张图片

推送成功以后,查看自己的远程库:

Git实操_第70张图片

克隆操作

远程库地址复制:

Git实操_第71张图片

克隆操作:

Git实操_第72张图片

克隆操作可以帮我们完成:

(1)初始化本地库

(2)将远程库内容完整的克隆到本地

(3)替我们创建远程库的别名:

在这里插入图片描述

邀请加入团队,push操作

Git实操_第73张图片

【1】更新本地库信息:

Git实操_第74张图片

【2】push内容到远程库中去:

发现可以直接push进去,并没有让我录入账号密码,或者也没有提示错误 - --》结果 很诡异

原因:git使用的时候在本地有缓存:

将缓存删除:

Git实操_第75张图片

现在再次重新push,发现出错了:

Git实操_第76张图片

必须要加入团队:

登录项目经理的账号,邀请普通成员:

Git实操_第77张图片

在这里插入图片描述

Git实操_第78张图片

登录被邀请者的账号,接收邀请:(在地址栏录入邀请链接即可:https://github.com/zhaoshanshan3366/GitResp2/invitations)

Git实操_第79张图片

远程库修改的拉取操作

【1】拉取操作 pull操作,相当于 fetch+merge

Git实操_第80张图片

【2】项目经理先先确认远程库内容是否更新了:

Git实操_第81张图片

【3】项目经理进行拉取:

(1)先是抓取操作:fetch:

Git实操_第82张图片

在抓取操作执行后,只是将远程库的内容下载到本地,但是工作区中的文件并没有更新。工作区中还是原先的内容:

Git实操_第83张图片

抓取后可以去远程库看看内容是否正确:

在这里插入图片描述

Git实操_第84张图片

然后发现内容都正确,就可以进行合并操作了:

合并之前应该将分支切换回来:

在这里插入图片描述

(2)进行合并:merge:

Git实操_第85张图片

远程库修改的拉取操作2

远程库的拉取可以直接利用pull命令来完成:

在这里插入图片描述

fetch+merge操作:—》为了保险,慎重

pull —>代码简单,省事

协同开发合作时冲突的解决办法

【1】
Git实操_第86张图片

向远程库推送数据:

Git实操_第87张图片

【2】

Git实操_第88张图片

做了一个拉取操作:

Git实操_第89张图片

到这里为止,现在远程合作没有任何问题。

现在操作同一个文件的同一个位置的时候,就会引起冲突:

【3】

Git实操_第90张图片

再次做了推送操作:

Git实操_第91张图片

改动位置:

Git实操_第92张图片

【4】

Git实操_第93张图片

改动Test.txt中内容,然后进行推送:

Git实操_第94张图片

发现 推送失败!

在冲突的情况下,先应该拉取下来,然后修改冲突,然后再推送到远程服务器:

先拉取:

Git实操_第95张图片

查看冲突:

Git实操_第96张图片

人为解决这个冲突:(该删的删,该留的留)

Git实操_第97张图片

解决完冲突以后,向服务器推送:

Git实操_第98张图片

推送:

在这里插入图片描述

解决了冲突问题:

Git实操_第99张图片

回顾跨团队合作交互方式

Git实操_第100张图片

跨团队合作

【1】得到远程库的地址:

Git实操_第101张图片

Git实操_第102张图片

地址:

https://github.com/zhaoshanshan3366/GitResp2.git

【2】进行fork操作:

在这里插入图片描述

进入到账号后:复制地址:https://github.com/zhaoshanshan3366/GitResp2.git

然后点击下面的fork操作:

Git实操_第103张图片

在这里插入图片描述

【3】然后就可以克隆到本地,并且进行修改:

在这里插入图片描述

Git实操_第104张图片

然后更改数据:添加到暂存区,然后提交到本地库,然后push到远程库:

Git实操_第105张图片

【4】进行pull request操作:

在这里插入图片描述

Git实操_第106张图片

Git实操_第107张图片

Git实操_第108张图片

Git实操_第109张图片

【5】进行审核操作:

Git实操_第110张图片

Git实操_第111张图片

可以互相留言:

在这里插入图片描述

查看具体提交的内容:

在这里插入图片描述

确定通过以后,可以进行合并:

Git实操_第112张图片

SSH免密登录

免密操作:

【1】进入用户的主目录中:

在这里插入图片描述

【2】执行命令,生成一个.ssh的目录:

在这里插入图片描述

keygen — > key generation

注意:C要大写

后面的邮箱,是你的github注册的账号的时候对应的邮箱

三次回车确认默认值即可

Git实操_第113张图片

发现在.ssh目录下有两个文件:

在这里插入图片描述

【3】打开id_rad.pub文件,将里面的内容进行复制操作:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqiZEbHnyAbBFzx/OFWUyxlL2NUyf//1NdmvYfi+x09AENYVDXcPc2CLiUSYpUcRj7eWuLiIBuzYO/0aYTYgSLPMKAKn8WSLipd7S+vqRsxRLZYna+WvfGvYXc6DexenZlgoMzQe7CBE4IaL1eG4IAvAbjXSF0pq7OJKkcb5L8lQ0HlU9p+eC7WluoW+ZThym/Au8lscDtUVE/I9IwAgvUXB4TxmP7aYD1YCrAUuQ+6mlgh+Tqqb4aWyHPIvtXidkWOPS2pZ7zGi+1cQE6UFxxNlIrH5tczmOKOZ2XKemFWMFc4S89O1y9M9pfOFZZ5F4gbQf6PmrbB4eSyYmWT1TH6FBlB9eaw8v8w186qvqbUKHIc450/hZuQ9LehhdHDgkT86uBAEkXBwwHvVsIM61AD7TC0E1uMw0/Cf4I64vZOVF0/pE6rjs+0LqvF/mtq4aM1riIkSKqFFEm5sx2MsCAJrSBTr3uQFufAMA4VmANH6YAtTwgIJtV5AI16XQlY/8= [email protected]

【4】打开github账号:

Git实操_第114张图片

Git实操_第115张图片

Git实操_第116张图片

【5】生成密钥以后,就可以正常进行push操作了:

对ssh远程地址起别名:

在这里插入图片描述

展示别名:

在这里插入图片描述

创建一个文件:

在这里插入图片描述

添加到暂存区,提交到本地库,然后push到远程库(地址用的是ssh方式的地址)

Git实操_第117张图片

ssh方式好处: 不用每次都进行身份验证

缺陷:只能针对一个账号

IDEA集成Git

IDEA集成Git:

Git实操_第118张图片

本地库的初始化操作:

Git实操_第119张图片

本地库初始化完成了,生成了.git目录:

Git实操_第120张图片

添加到暂存区,再提交到本地库操作; add +commit:

Git实操_第121张图片

Git实操_第122张图片

Git实操_第123张图片

Git实操_第124张图片

当你更改内容以后,前面跟本地库内容不一致的地方会显示绿色:

Git实操_第125张图片

本地库和远程库的交互

因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在 git pull 之后,这句代码是在git 2.9.2版本发生的,最新的版本需要添加 --allow-unrelated-histories 告诉 git 允许不相关历史合并。

假如我们的源是origin,分支是master,那么我们需要这样写 git pull origin master --allow-unrelated-histories

这个方法只解决因为两个仓库有不同的开始点,也就是两个仓库没有共同的 commit 出现的无法提交。如果使用本文的方法还无法提交,需要看一下是不是发生了冲突,解决冲突再提交

push推送: git push -u origin master -f

在这里插入图片描述

在这里插入图片描述

到这里 远程库和本地库就可以进行交互了。

在IDEA中进行推送:

Git实操_第126张图片

Git实操_第127张图片

Git实操_第128张图片

一般在开发中先pull操作,再push操作,不会直接进行push操作!!

使用IDEA克隆远程库到本地

利用IDEA进行克隆项目:

Git实操_第129张图片

Git实操_第130张图片

克隆到本地后:

这个目录既变成了一个本地仓库,又变成了工作空间。

Git实操_第131张图片

解决冲突

【1】在你push以后,有冲突的时候提示合并操作:

Git实操_第132张图片

合并:

Git实操_第133张图片

Git实操_第134张图片

如何避免冲突

【1】团队开发的时候避免在一个文件中改代码

【2】在修改一个文件前,在push之前,先pull操作

删除某一次对远程仓库的push

  • 提交了3个文件aa.txt,bb.txt,cc.txt,可通过git reflog 查看
    在这里插入图片描述
    Git实操_第135张图片

  • 通过 git revert 索引/comiit id
    Git实操_第136张图片
    Git实操_第137张图片

  • 在重新push 到远程仓库就可以删除某一次的push,而不影响别人之后push的代码
    Git实操_第138张图片

  • 在查看远程仓库结果,可以看见bb.txt没了,aa.txt和cc.txt还在,如果用reset的话cc.txt也会消失
    Git实操_第139张图片
    在这里插入图片描述

你可能感兴趣的:(#,实战,git,服务器,数据库)