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

Git

  • Git概述
  • 分布式版本控制和集中式版本控制
  • Git常用命令
    • 设置用户签名
    • 初始化本地库
    • 查看本地库状态
    • 添加暂存区
    • 将暂存区的文件提交到本地库
    • 修改文件
    • 版本穿梭
  • Git分支操作
    • 查看分支
    • 创建分支
    • 切换分支
    • 合并分支
    • 冲突合并
  • 远程仓库命令
    • 创建远程库别名
    • 推送本地库到远程库
    • 拉取远程库到本地库
    • 克隆远程库到本地
  • SSH免密登录

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 设置用户邮箱

Git使用入门:从下载到提交的全过程_第1张图片

查看用户下的配置文件
Git使用入门:从下载到提交的全过程_第2张图片

Git使用入门:从下载到提交的全过程_第3张图片

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

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

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

初始化本地库

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

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

生成的.git目录在windows环境下是默认隐藏,在查看方式下勾选隐藏的项目可以显示出来
Git使用入门:从下载到提交的全过程_第4张图片

该目录下包含以下内容
Git使用入门:从下载到提交的全过程_第5张图片

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

文件内容是空的,因为.git文件是隐藏的,无法显示,在Linux下添加一个参数,指令为ll -a即可查看
Git使用入门:从下载到提交的全过程_第6张图片

跳转进.git文件中查看内容
Git使用入门:从下载到提交的全过程_第7张图片

查看本地库状态

使用git status查看本地库的命令
Git使用入门:从下载到提交的全过程_第8张图片

新增一个文件,再查看本地库状态
Git使用入门:从下载到提交的全过程_第9张图片

将代码进行复制
Git使用入门:从下载到提交的全过程_第10张图片

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

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

hello.txt文件创建成功

再次查看本地库的状态
Git使用入门:从下载到提交的全过程_第11张图片

添加暂存区

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

然后再次查看本地库状态
Git使用入门:从下载到提交的全过程_第12张图片
文件被git追踪到,文件被添加到了暂存区,此时的文件就是一个历史版本,暂存区的文件可以被删除

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

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

再次查看本地库状态
Git使用入门:从下载到提交的全过程_第13张图片
hello.txt变为未追踪状态,说明只是暂存区的文件被删除

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

git commit -m ”日志信息“ 文件名Git使用入门:从下载到提交的全过程_第14张图片

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

git reflog查看版本信息
image-20230212114138365

git log 查看详细的版本信息
Git使用入门:从下载到提交的全过程_第15张图片

修改文件

Git使用入门:从下载到提交的全过程_第16张图片

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

Git使用入门:从下载到提交的全过程_第17张图片

显示本地库状态已被修改,本次文件修改没有被添加到暂存区,将本次修改的文件添加到暂存区
Git使用入门:从下载到提交的全过程_第18张图片

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

Git使用入门:从下载到提交的全过程_第19张图片
在这里提示一行新增,一行删除,在git里是按照行来维护文件的,修改一行在这里的意思是把修改之前的内容删掉,将修改之后的内容添加进来

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

查看版本信息
image-20230212210250744

这时就有两个版本信息,指针指向第二个版本,查看文件内容
Git使用入门:从下载到提交的全过程_第20张图片

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

版本穿梭

查看历史版本

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

Git使用入门:从下载到提交的全过程_第21张图片

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


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

Git使用入门:从下载到提交的全过程_第22张图片

当前指针指向了第一个版本的文件
Git使用入门:从下载到提交的全过程_第23张图片

文件内容也为上一个版本的内容
Git使用入门:从下载到提交的全过程_第24张图片

点击 .git 文件,打开HEAD配置文件
Git使用入门:从下载到提交的全过程_第25张图片

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

image-20230213114514619

如果想要知道是在master分支的哪个版本,可以查看refs文件目录
Git使用入门:从下载到提交的全过程_第26张图片
image-20230213114910335

打开master文件,里面记录了master分支指向的第一个版本完整的版本号
Git使用入门:从下载到提交的全过程_第27张图片


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

Git使用入门:从下载到提交的全过程_第28张图片

头指针指向master分支,master分支指向first版本
而后又提交了Second版本,master指向Second版本
Git使用入门:从下载到提交的全过程_第29张图片

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

Git分支操作

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

分支的好处

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

分支的操作

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

查看分支

git branch -v

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

创建分支

git branch 分支名

Git使用入门:从下载到提交的全过程_第30张图片

切换分支

git checkout 分支名

image-20230213132918583image-20230213133007943

当前切换到了hot-fix分支

在hot-fix分支对文件进行修改,添加新的内容
Git使用入门:从下载到提交的全过程_第31张图片

同样的步骤将文件提交到本地库并查看版本信息
Git使用入门:从下载到提交的全过程_第32张图片

合并分支

切换到master分支

Git使用入门:从下载到提交的全过程_第33张图片
可以看到master分支下的文件内容并没有改变

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

Git使用入门:从下载到提交的全过程_第34张图片
hot-fix分支是基于master分支添加了一些内容,不会产生合并的冲突

冲突合并

冲突产生的原因

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

对master分支下的文件倒数第二行添加内容
Git使用入门:从下载到提交的全过程_第35张图片

切换到hot-fix分支下,在文件的倒数第一行添加内容
Git使用入门:从下载到提交的全过程_第36张图片
Git使用入门:从下载到提交的全过程_第37张图片

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

Git使用入门:从下载到提交的全过程_第38张图片

image-20230213142251260

查看本地库状态

Git使用入门:从下载到提交的全过程_第39张图片
两个分支都进行了修改,不能自动进行合并,需要手动合并

Git使用入门:从下载到提交的全过程_第40张图片

手动合并只需要把要保留的内容留下,其余内容删除即可Git使用入门:从下载到提交的全过程_第41张图片

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

image-20230213144738465
Git使用入门:从下载到提交的全过程_第42张图片

分支合并成功

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

远程仓库命令

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

创建远程库别名

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

Git使用入门:从下载到提交的全过程_第43张图片

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

Git使用入门:从下载到提交的全过程_第44张图片

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

推送本地库到远程库

Git使用入门:从下载到提交的全过程_第45张图片

Git使用入门:从下载到提交的全过程_第46张图片

成功的推送了远程端github上

拉取远程库到本地库

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

Git使用入门:从下载到提交的全过程_第47张图片

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

Git使用入门:从下载到提交的全过程_第48张图片

查看本地库状态
Git使用入门:从下载到提交的全过程_第49张图片

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

再次查看文件内容
Git使用入门:从下载到提交的全过程_第50张图片

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

克隆远程库到本地

D盘下新建git-clone文件

复制要拉取的远程库链接Git使用入门:从下载到提交的全过程_第51张图片

Git使用入门:从下载到提交的全过程_第52张图片

将远程库项目拉取到新的本地库 Git-clone 中Git使用入门:从下载到提交的全过程_第53张图片

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

查看远程库别名
image-20230216104054931

别名自动变为了origin

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

SSH免密登录

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

Git使用入门:从下载到提交的全过程_第54张图片

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

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

image-20230216112719907

在本地用户下生成.ssh文件
Git使用入门:从下载到提交的全过程_第55张图片

获取公钥
Git使用入门:从下载到提交的全过程_第56张图片

将获取的公钥复制到github账号中
Git使用入门:从下载到提交的全过程_第57张图片

Git使用入门:从下载到提交的全过程_第58张图片

远程库查看项目文件
Git使用入门:从下载到提交的全过程_第59张图片
SSH链接没有报任何警告

你可能感兴趣的:(javaSE,git,github)