Git使用入门:从下载到提交的全过程

Git概述

Git是一个免费的,开源的分布式版本控制系统,可以快速高效地处理从小型到大型的项目。
Git易于学习,占地面积小,性能模块。它具有廉价的本地库,方便的暂存区域和多个工作流分支特性。

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

分布式版本控制和集中式版本控制

集中式版本控制工具

集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接这台服务器,取出最新的文件或者提交更新。
这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么,而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上的维护本地数据库来得轻松容易。
显而易见的缺点是中央服务器的单点故障,如果服务器宕机,在宕机的一段时间内,谁都无法提交更新,也就无法协同工作。

在收集个人信息时,通常多人可同时编辑的表格软件,每个人都可以看到其他人的实时填写信息,管理员可赋予填写人权限, 是一个集中化的版本控制系统。

分布式版本控制工具

像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库),这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
1.服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
2.每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

使用过学习通的话,在小组作业中提交word文档时,由本地上传到当中,每个人都可以将已提交的文件重新进行编辑,生成多个版本的文件,体现出分布式版本控制的思想。

Git常用命令

命令名称作用
git config --global.user.name 用户名设置用户签名
git config --global.user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m ”日志信息“ 文件名提交到本地库
git reflog查看历史记录
git reset-hard 版本号版本穿梭

设置用户签名

git config --global.user.name 设置用户签名

git config --global.user.email 设置用户邮箱

image-20230211204047926

查看用户下的配置文件
image-20230211204128685

image-20230211204158815

设置的用户名和邮箱地址就已经添加到了配置文件中

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码

这里设置用户签名和将来登录GitHub(或其他代码托管中心)的账号没有任何关系,是一个虚拟的设置。

初始化本地库

要用git管理目录的话,首先得让git获取目录的管理权,也就是初始化git

在D盘Git-space文件下新建git-demo项目,用git管理该项目,git没有该项目的管理权限,需要用 git init 初始化git
image-20230211220844770

生成的.git目录在windows环境下是默认隐藏,在查看方式下勾选隐藏的项目可以显示出来
image-20230211221125562

该目录下包含以下内容
image-20230211221224653

可以在git图形化界面中也可以输入查看的指令
image-20230211221421780

文件内容是空的,因为.git文件是隐藏的,无法显示,在Linux下添加一个参数,指令为ll -a即可查看
image-20230211221811561

跳转进.git文件中查看内容
image-20230211221907377

查看本地库状态

使用git status查看本地库的命令
image-20230212102937831

新增一个文件,再查看本地库状态
image-20230212103257538

将代码进行复制
image-20230212103457201

这样就模拟写了一个代码,shift+":"进入到末行模,,输入wq保存该文件

查看当前文件夹下的内容
image-20230212104130266

hello.txt文件创建成功

再次查看本地库的状态
image-20230212110548428

添加暂存区

使用git add 将文件添加到暂存区
image-20230212110905585

然后再次查看本地库状态
image-20230212111243093
文件被git追踪到,文件被添加到了暂存区,此时的文件就是一个历史版本,暂存区的文件可以被删除

将暂存区的文件删除image-20230212111723466

本地库中的文件仍然是存在的
image-20230212111846537

再次查看本地库状态
image-20230212111944780
hello.txt变为未追踪状态,说明只是暂存区的文件被删除

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

git commit -m ”日志信息“ 文件名image-20230212113216495

查看本地库状态
image-20230212113913481
说明提交本地库成功了

git reflog查看版本信息
image-20230212114138365

git log 查看详细的版本信息
image-20230213113202171

修改文件

在这里插入图片描述

修改文件中第一行的内容并保存,查看本地库状态

image-20230212205409985

显示本地库状态已被修改,本次文件修改没有被添加到暂存区,将本次修改的文件添加到暂存区
image-20230212205621896

修改后的文件被添加到暂存区

image-20230212205849128
在这里提示一行新增,一行删除,在git里是按照行来维护文件的,修改一行在这里的意思是把修改之前的内容删掉,将修改之后的内容添加进来

再次查看本地库状态
image-20230212210140479

查看版本信息
image-20230212210250744

这时就有两个版本信息,指针指向第二个版本,查看文件内容
image-20230212210431178

流程为:文件修改—>添加到暂存区—>提交到本地库—>查看版本信息
只要工作区的文件修改就会产生新的暂存区文件,将修改多次后的文件通过存放在暂存区并提交到本地库,就可以保留文件的多个版本,体现出了git的分布式版本控制功能。

版本穿梭

查看历史版本

● git reflog 查看版本信息
● git log 查看版本详细信息

image-20230213113313199

可以明显的看到项目经过了几个版本的更替,版本号,以及当前指针指向的版本


如果感觉当前新的版本写的不好,想找回到之前的版本,是支持版本穿梭的
git reset-hard +版本号 实现版本穿梭

image-20230213113942268

当前指针指向了第一个版本的文件
image-20230213114226385

文件内容也为上一个版本的内容
image-20230213114300895

点击 .git 文件,打开HEAD配置文件
image-20230213114428570

可以看到指针指向本地库的master分支

image-20230213114514619

如果想要知道是在master分支的哪个版本,可以查看refs文件目录
image-20230213114851540
image-20230213114910335

打开master文件,里面记录了master分支指向的第一个版本完整的版本号
image-20230213115050120


GIt控制版本,并不是制造了多个副本来实现,而是在本地库的内容里记录了多个日志,通过调用指针指向不同的版本

image-20230213125706249

头指针指向master分支,master分支指向first版本
而后又提交了Second版本,master指向Second版本
image-20230213125952855

master是分支,每个分支指向一个版本,head是当前指针,指针指向master分支

Git分支操作

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着工作者可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层也是指针的引用)。

分支的好处

同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

查看分支

git branch -v

image-20230213132324873
当前仅有一个master分支

创建分支

git branch 分支名

image-20230213132541522

切换分支

git checkout 分支名

image-20230213132918583image-20230213133007943

当前切换到了hot-fix分支

在hot-fix分支对文件进行修改,添加新的内容
image-20230213133615402

同样的步骤将文件提交到本地库并查看版本信息
image-20230213134250429

合并分支

切换到master分支

image-20230213134754703
可以看到master分支下的文件内容并没有改变

现在将两个分支合并起来——git merge 分支名

image-20230213135246418
hot-fix分支是基于master分支添加了一些内容,不会产生合并的冲突

冲突合并

冲突产生的原因

合并分支时,两个分支在同一个文件的同一位置有两套完全不同的修改,Git无法替我们决定使用哪一个,必须人为决定新代码内容。

对master分支下的文件倒数第二行添加内容
image-20230213141123790

切换到hot-fix分支下,在文件的倒数第一行添加内容
image-20230213141247524
image-20230213141646466

在master分支上合并hot-fix分支

image-20230213142118278

image-20230213142251260

查看本地库状态

image-20230213142443037
两个分支都进行了修改,不能自动进行合并,需要手动合并

image-20230213142759064

手动合并只需要把要保留的内容留下,其余内容删除即可image-20230213142942414

手动合并后的文件需要再次添加到暂存区,提交至本地库(此时使用git commit命令时不能带文件名)

image-20230213144738465
image-20230213144842612

分支合并成功

当前所在分支,是由HEAD决定的。创建分支的本质就是多创建一个指针

远程仓库命令

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

创建远程库别名

在github中创建远程库,远程库的名称与本地库的名称相同

image-20230215185138523

远程库链接用于拉取和推送代码
起别名是为了方便后期使用
为了方便记忆,在起别名时建议和库名保持一致

image-20230215204301805

在这里出现两个别名,一个使拉取代码用的别名,而另一个是推送代码时使用的

推送本地库到远程库

image-20230215214002940

image-20230215214105487

成功的推送了远程端github上

拉取远程库到本地库

对远程库的文件中的内容进行修改

image-20230215214811413

此时远程库和本地库的数据已经不一致,需要更新本地库的数据,就需要从远程库进行拉取

image-20230215215022483

查看本地库状态
image-20230215215117101

本地库状态没有显示任何修改,拉取状态会自动提交本地库

再次查看文件内容
image-20230215215232900

与远程库中的数据保持一致,对本地库进行了更新,远程库和本地库保持同步

克隆远程库到本地

D盘下新建git-clone文件

复制要拉取的远程库链接image-20230216102512762

image-20230216102226993

将远程库项目拉取到新的本地库 Git-clone 中image-20230216103824193

公共库的读权限是没有限制的,任何人都可以查看内容

查看远程库别名
image-20230216104054931

别名自动变为了origin

在clone远程库时会做以下内容
1.拉取代码
2.初始化本地库
3.创建别名

SSH免密登录

在克隆远程库除了HTTPS链接,还有SSH链接

image-20230216111605906

这里显示 GitHub 帐户中没有任何公共 SSH 密钥。您可以添加新的公钥,或尝试通过 HTTPS 克隆此存储库。

需要获取新的公钥
利用非对称加密协议算法生成.ssh文件

image-20230216112719907

在本地用户下生成.ssh文件
image-20230216113029683

获取公钥
image-20230216113535800

将获取的公钥复制到github账号中
image-20230216113848765

image-20230216113955467

远程库查看项目文件
image-20230216114247882
SSH链接没有报任何警告

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AMBLE RUM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值