Git知识与使用-1

Git知识与使用-1

一、Git基础知识

1、Git的工作流程

1
2
3
4
5
6
7
8
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库:
本地仓库和远程仓库
工作流程如下
1.从远程仓库中克隆或拉取代码到本地仓库(clone/pull)
2.从本地进行代码修改
3.在提交前先将代码提交到暂存区
4.提交到本地仓库。本地仓库中保存修改的各个历史版本
5.修改完成后,需要和团队成员共享代码时,将代码push到远程仓库

总结:git和svn的区别

1
2
1. svn 是集中式版本控制工具,git 是分布式版本控制工具
2. svn 不支持离线提交,git 支持离线提交代码

2、Git 的安装下载

下载地址: https://git-scm.com/download

二、Git 工作流程

1、Git流程图

概念即详解

1
2
3
4
5
6
7
8
本地仓库:是在开发人员自己电脑上的Git仓库,存放我们的代码(.git 隐藏文件夹就是我们的本地仓库)		
远程仓库:是在远程服务器上的Git仓库,存放代码(可以是github.com或者gitee.com 上的仓库,或者自己该公司的服务器)
工作区: 我们自己写代码(文档)的地方
暂存区: 在 本地仓库中的一个特殊的文件(index) 叫做暂存区,临时存储我们即将要提交的文件
------------
Clone:克隆,就是将远程仓库复制到本地仓库
Push:推送,就是将本地仓库代码上传到远程仓库
Pull:拉取,就是将远程仓库代码下载到本地仓库,并将代码 克隆到本地工作区

文件状态讲解

1
2
3
4
5
6
Git工作目录下的文件存在两种状态:
1 untracked 未跟踪(未被纳入版本控制) : 比如新建的文件(此时文件夹上没有图标或者有一个"问号")
2 tracked 已跟踪(被纳入版本控制)
2.1 Staged 已暂存状态 : 添加 但未提交状态(此时文件夹上有一个"加号")
2.2 Unmodified 未修改状态 : 已提交(此时文件夹上有一个"对号")
2.3 Modified 已修改状态 : 修改了,但是还没有提交 (此时文件夹上有一个"红色感叹号")

2、分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,避免影响开发主线。多线程开发,可以同时开启多个任务的开发,多个任务之间互不影响.

为何要使用分支:

先看单线程开发

1
2
3
4
5
6
7
思考如下现象
10.1 日 业务部门提出需求 : 明年 元旦3天做2个促销活动
1) 12.31 号上线活动1,
2) 1.4 号上线活动2 ,同时 要求撤销 活动1
你所在部门领导为了保证能顺利完成,要求 11.15 号完成上述连个功能的开发工作
此时作为开发人员:我要面临两个文件, 活动1 的代码,即要存在(12.31 要用)又要不存在(1.4 号要求删除),我们怎么做?
显然比较棘手,如果使用分支(可以理解为将代码复制一份)将很好解决

3、标签

如果你的项目达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以给它打上标签(tag)
比如说,我们想为我们的项目发布一个”1.0”版本。 我们给最新一次提交打上(HEAD)”v1.0”的标签。
标签可以理解为项目里程碑的一个标记,一旦打上了这个标记则,表示当前的代码将不允许提交

三、Git的连接与配置

1、SSH连接概述

实际上git 不仅仅支持用户名密码方式的配置,可以有另外一种相对更加安全的配置即ssh方式配置

ssh方式的底层原理:

ssh连接地城是RAS加密算法,又称非对称加密,是一种现在公认的最安全的加密方式
数学基础好的同学可以研究一下
https://www.cnblogs.com/cjm123/p/8243424.html

公钥私钥加密可以看作古代 的”虎符” , 我们本地电脑有一份,远程服务器有一份, 只要 “虎符” 核对通过表示身份无误,可以执行提交等操作,无需输入用户名密码

2、生成和使用公钥私钥

生成公钥私钥:

1
ssh-keygen -t rsa

一直回车即可
会默认用户目录 .ssh 目录生成一个默认的id_rsa文件 和id_rsa.pub

ssh密钥配置:

在Git仓库,上传RSA公钥

四、git基本操作

1、介绍

​ 上述我们的操作 使用的 是客户端TortoiseGit 操作的git ,实际上底层依旧是使用的命令行帮我们执行, 在早期 git 并没有窗口化工具,开发人员只能使用命令行模式

实际上,如果你掌握并熟练使用了命令行模式操作git 的话,你会发现某些操作命令行比窗口化操作要简单

所有你在工作中会发现高深的技术人员可能会喜欢命令行模式提交git

1.1、环境配置

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息

1
2
3
4
5
6
7
8
#设置用户信息 
git config --global user.name “itcast”
git config --global user.email “itcast@itcast.cn”
#查看配置信息
git config --list
git config user.name
#通过上面的命令设置的信息会保存在~/.gitconfig文件中

1.2、初始化本地仓库 init

1
2
3
4
# 初始化仓库带工作区
git init
# 初始化仓库不带工作区
git init --bare

1.3、克隆 clone

1
2
3
# 从远程仓库克隆
git clone 远程Git仓库地址
例如: git clone https://gitee.com/itcast/gittest.git

1.4、查看状态 status

1
2
3
4
# 查看状态
git status
#查看状态 使输出信息更加简洁
git status –s

1.5、add

1
2
3
4
5
# 将未跟踪的文件加入暂存区
git add <文件名>
# 将暂存区的文件取消暂存 (取消 add )
git reset <文件名>

1.6、commit

1
2
3
# git commit 将暂存区的文件修改提交到本地仓库
git commit -m "日志信息" <文件名>

1.7、删除 rm

1
2
3
4
# 从本地工作区 删除文件
git rm <文件名>
# 如果本工作区库误删, 想要回退
git checkout head <文件名>

2、git 远程仓库操作

2.1、查看远程

1
2
3
4
5
6
7
# 查看远程  列出指定的每一个远程服务器的简写
git remote
# 查看远程 , 列出 简称和地址
git remote -v
# 查看远程仓库详细地址
git remote show <仓库简称>

2.2、添加/移除远测仓库

1
2
3
4
# 添加远程仓库
git remote add <shortname> <url>
# 移除远程仓库和本地仓库的关系(只是从本地移除远程仓库的关联关系,并不会真正影响到远程仓库)
git remote rm <shortname>

2.3、从远程仓库获取代码

1
2
3
4
5
6
7
8
9
# 从远程仓库克隆
git clone <url>
# 从远程仓库拉取 (拉取到.git 目录,不会合并到工作区,工作区发生变化)
git fetch <shortname> <分支名称>
# 手动合并 把某个版本的某个分支合并到当前工作区
git merge <shortname>/<分支名称>
# 从远程仓库拉取 (拉取到.git 目录,合并到工作区,工作区不发生变化) = fetch+merge
git pull <shortname> <分支名称>
git pull <shortname> <分支名称> --allow-unrelated-histories # 强制拉取合并

注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数–allow-unrelated-histories (如上 命令)

1
2
# 将本地仓库推送至远程仓库的某个分支
git push [remote-name] [branch-name]

3、命令行– 分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 默认 分支名称为 master
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
# 创建分支
git branch <分支名>
# 切换分支
git checkout <分支名>
# 删除分支(如果分支已经修改过,则不允许删除)
git branch -d <分支名>
# 强制删除分支
git branch -D <分支名>
1
2
3
4
5
6
# 提交分支至远程仓库
git push <仓库简称> <分支名称>
# 合并分支 将其他分支合并至当前工作区
git merge <分支名称>
# 删除远程仓库分支
git push origin –d branchName

4、命令行 –tag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 列出所有tag
git tag
# 查看tag详细信息
git show [tagName]
# 新建一个tag
git tag [tagName]
# 提交指定tag
$ git push [仓库简称] [tagName]
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag (注意 空格)
$ git push origin :refs/tags/[tag]

五、相关软件配置和使用git

1、intellij

2、VS Code


Git知识与使用-1
https://davidpenn888.github.io/2023/05/25/Git_1/
作者
David Penn
发布于
2023年5月25日
许可协议