Git教程-带你深刻认识Git工具使用

143 阅读13分钟

Git

git 中文 教程 git-scm.com/book/zh/v2

版本管理系统介绍

在做项目时,每一个功能写完以后, 为了方便查看都是单独保存成一个文件,但后期维护怎么办?

实际开发中,代码经常改来改去,修改后就无法找回之前的代码了。 程序员应该记录每次代码的变化,以便以后回到历史版本查看或直接使用

版本管理系统就是为了解决上述这些问题应运而生的

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

作用: 记录每次代码的变更,以便将来查阅特定版本的修改情况。 完成多人协作(必须配合远程仓库)

版本管理软件的分类 : 集中式(代表:SVN ) 分布式(代表:Git )

集中式版本管理

1651232572024

集中式版本管理软件的特点是,代码的版本集中到一个服务器上。

问题:如果没有网络或者服务器崩溃,将无法进行版本管理

集中式

  1. 必须要链接网络 才能保存代码记录
  2. 落后 少部分公司在用
  3. 软件代表 svn

分布式版本管理

1651232673302

分布式

  1. 随时随地都可以保存代码的记录
  2. 主流 必须会用
  3. 软件代表 Git

Git安装及配置

通过Git官网,即可下载到Git

Git官网,除了可以下载Git,还有完整的文档及入门教程

一直下一步安装即可。 如果你不想安装在C盘,则把路径中的C修改为D或者E即可。 安装成功后,桌面不会有任何图标, 在任何文件夹空白处,点击鼠标右键,看到多了两个右键菜单,表示安装成功

Mac系统,打开终端,输入 git --version 回车,看到Git版本号表示安装成功

1651232801476

必要配置

当我们使用Git记录代码的版本的时候,Git需要知道你是谁?也就是提交代码的人是谁?

Git要求,必须配置一个用户名和一个邮箱 - 重要

用户名,配置成自己名字的全拼(如 SuJiehao)

邮箱,最好配置成和你能收邮件的邮箱(如 megasu@qq.com

具体操作

1、windows用户,在任何文件夹空白处,鼠标右键,打开 “Git Bash Here”; Mac用户打开终端窗口

2、在出现的终端窗口中,输入 git config --global user.name "xxx" ,回车执行该命令,用以配置用户名

3、在出现的终端窗口中,输入 git config --global user.email "xxx" ,回车执行该命令,用以配置邮箱

查看版本

git --version 

首次使用 设置个人信息

  • 用户名 xxx 要修改
git config --global user.name "用户名"
  • 邮箱 xxx 修改为邮箱即可
git config --global user.email "xxx" 

查看设置的信息是否正确

  • 查看用户名
git config --global user.name 
  • 查看邮箱
git config --global user.email 

1651234689106

初始化本地仓库

VsCode 初始化仓库

点击初始化仓库按钮,其实就是在当前文件夹根目录运行了 git init 进行仓库初始化

1651232915894

VsCode 查看 Git 状态

1651232929526

Git 常见文件标志

通过标志可以知道当前文件属于什么状态

U: 未跟踪的文件

A: 新增的文件

D: 删除的文件

M: 修改的文件

C: 文件内有冲突

GitLens 插件安装 - VsCode(掌握)

安装 GitLens 提高工作效率

1651233034794

1651233046202

出现以下弹窗时,点击<总是>按钮即可

点击了总是按钮:

git add . 总是自动完成

git commit -m 输入框的信息

1651233074323

Git内部实现,离不开它维护的三个区域

工作区(代码区) 暂存区 仓库

1651233131320

通过 VsCode 实现Git功能

确保你的代码已经提交过版本

打开 commits

图片.png

找到我们想要回去的版本 鼠标右键

图片.png

以上就是使用 VsCode 实现快捷的操作

在以前 使用的则是Git的原生操作

以下示例

初始化git仓库

git init

添加到暂存区

git add . 

提交到本地仓库

git commit -m "完成了登录功能"

版本回退

查看所有版本信息

git reflog

1651235474701

通过终端 输入命令的方式 来切换版本

git reset --hard 版本号 

1651235352784

基础命令(添加、提交、撤销)

初始化仓库

执行 git init 表示初始化一个本地仓库

一个项目,如果要使用Git对其进行管理,必须先初始化

初始化之后,会在项目文件夹中出现叫做 .git 的隐藏文件夹;有关git的全部记录都在它里面,不要轻易删除。

你的电脑中,肯定会有很多项目,所以,初始化的时候,必须要注意路径,注意路径是不是项目文件夹 绝对不能嵌套初始化

初始化,顾名思义,一个项目初始的时候,执行一次 git init 命令即可

当我们看到项目文件夹中,已经有 .git 文件夹了,说明已经初始化过了,就不要再初始化了

1651233208969

查看日志

查看日志的命令: git log (了解)

如果日志比较多,后面会出现 :

按 ↓ 键,可以查看剩余的日志

按 q 键,退出

1651233280181

命令选项

1651245123894

git log 命令后面,可以跟一些选项;

如同调用一个函数,传递一些参数一样

命令后跟不同的选项,得到的结果也不一样

git log --oneline (了解) 单行查看简略版日志

git log -n (了解)查看最近 n 次提交

git log --reflog (了解)可以查看到当前版本之后的日志

git log --reflog --oneline (了解)也可以这样配合使用

1651233332106

命令式皆为了解即可

将工作区的改动添加到暂存区:git add(了解)

git add . (了解)将工作区全部改动添加到暂存区

git add < file > (了解)指定文件添加到暂存区

将暂存区的文件提交到仓库:git commit -m (了解)提交日志

git commit -m (了解)提交日志 全部提交到本地仓库,形成一个版本

git commit < file > -m (了解)提交日志 指定文件提交到本地仓库,形成一个版本

提交日志,最好使用英文半角引号引起来;如果没有特殊字符,不加引号也可以

直接将工作区的改动提交到本地仓库

git commit -a -m (了解)提交日志

该命令对新增的文件无效

该命令会将工作区的改动更新到暂存区,同时提交到仓库

1651233405189

撤销,指的是将最后一次提交的内容撤销到暂存区、工作区;或者将刚刚暂存的内容撤销到工作区

最后一次提交的内容 暂存区:

git reset < file> 撤销指定的文件

git reset . 撤销全部文件

暂存区 工作区:

git checkout < file> 撤销指定的文件

git checkout . 撤销全部

最后一次提交的内容 暂存区/工作区(相当于重置) git reset --hard

该命令后不能指定文件

回到历史版本、或在历史版本中穿梭

git reset --hard 版本号

分支

分支介绍

首先说,其他版本管理软件,也有分支系统;但Git的分支系统及其强大,是Git的重要特色

分支就是当前项目的一个副本(可以理解为把当前项目复制了一份,可以这样理解,但要知道内部实现并非如此)。

初始化之后,Git默认创建了一个叫做 master 的分支,master分支也叫做主分支。

实际开发中,正规的公司,都不允许直接在master分支上开发。需要创建分支,在分支上开发,最后将代码合并回master。

分支相关-命令式(了解)

查看所有本地分支

git branch

创建新分支

git branch 分支名

比如,创建一个叫做 laoban 的分支

git branch laoban

1651233712160

切换分支

git checkout 分支名

比如,切换到 laoban 分支

git checkout laoban

比如,切换到master分支

git checkout master

删除分支(删除时,必须先切换到其他分支-了解)

git branch -d 分支名

git branch -D 分支名 强制删除分支,分支有代码更新,代码还没有合并就要删除,则需要强制删除

删除分支,必须先切换到另外的分支,然后再执行删除命令

创建并直接切换分支

git checkout -b 分支名

合并分支(重点)

git merge 分支名

分支合并,快进模式-了解

两个分支,如果一个分支包括另一个分支的全部版本,则合并的时候,属于快进模块合并

分支合并的冲突

千万不要“视冲突而不见”-重点

1651233914780

1651245234749

分支合并,三方合并-了解

三方合并模式中,如果两个分支更改了不同的文件,或同一个文件的不同位置,则合并时会出现如下弹框

这是告诉我们,合并成功了,但是,需要提交一次呀

提交,就得写提交日志呀

这个框,就是让我们写提交日志呢

画面中,黄色的 “Merge branch add”是默认的提交日志

如果使用默认的提交日志,则直接输入 “:q”即可完成合并

如果要修改提交日志,则按 “i”进入 “插入模式”

修改黄色的字(提交日志)

按 “esc”退出“插入模式”

输入 “:wq”退出,即可完成合并

1651233960470

三方合并模式中,如果两个分支更改了同一个文件的同一个位置,则合并时会出现如下画面

这是告诉我们,合并时产生了冲突 千万不要“视冲突而不见”

根据提示,找到有冲突的文件

根据自己的分析、或寻求另一个同事一起解决冲突 去掉代码中的分割线,保存代码

此时,还没有合并完哟。。。

执行 git add .

执行 git commit -m '提交日志' 完成分支的合并

1651233992224

工具的方式分支使用

让 master 分支来合并 dev分支

image.png

image.png

分支的删除

image.png

远程仓库

目前我们都是在本地进行版本管理

如果要发布项目或者进行多人协作,那么就需要一台公共的服务器

github 、码云 等提供免费的仓库托管服务

也就是,我们可以将本地仓库的代码推送到远程仓库永久保存

创建远程仓库

码云

右上角的 “+” ,选择新建仓库

填写仓库名,选择公开 或 私有

点击创建按钮,创建。

github(自行了解)

右上角的 “+” ,选择 “New repository”

填写仓库名称

点击创建按钮,创建。

初学,必须按照上述步骤创建;不要勾选其他选项

两种推送方式

推送本地仓库 到 远程仓库,有两种方式

https 方式

ssh 方式(推荐使用)

不同的方式,注意选择不同的 url,千万不可混淆

1651233544712

https方式推送(自行了解)

如果使用 https,无需配置,但每次使用都需要手动输入账号密码,较为麻烦

添加远程仓库地址到本地 git remote add origin https地址

首次推送 git push -u origin master

执行完后者,会弹出一个输入账号密码的框,填写 码云/github 的账号密码即可推送成功

1651244014281

1651244051365

1651244108272

1651244600554

1651244690406

1651244777305

1651244968199

正常的在这个仓库中 项目的开发

  • 新建文件
  • 修改文件
  • 提交记录

开始推送本地仓库的代码到远程仓库上

1651245707598

1651245606915

拉取更新

A: 创建了项目初始化(v1)

B: 克隆远程仓库(v1)

A: 继续在仓库上添加功能 (v1->v2,v2->v3)

B:让本地仓库来拉取远程仓库上的最新的版本 拉取更新



git pull

第二种方式推送和使用远程仓库

  1. 用户先在本地电脑上进行初始化 git 仓库的操作
git init
  1. 正常添加文件 提交版本
git add .
git commit -m "init"
  1. 如果直接敲 命令 git push 提示出错 img
  2. 按照 码云的上的两行命令 复制来操作即可 img
  3. 当我们运行
git remote add origin https://gitee.com/ukSir/web04-75.git

img

  1. 最后运行
git push -u origin master 

-u 意思如果这次我们推送成功了,下次 可以直接 执行 git push 不用写这么长一串

如果失败

出现git错误 error: failed to push some refs to 'github.com/... 的主要原因是远程库与本地库不一致造成的,在hint中也有提示把远程库同步到本地库就可以了。

发生问题时候的状态

Snipaste_2022-05-08_17-21-43.png

执行 git pull -–rebase origin master 操作

执行 git pull -–rebase origin master 操作,

意为先取消commit记录,并且把它们临时保存为补丁(patch)(这些补丁放到”.git/rebase”目录中),之后同步远程库到本地,最后合并补丁到本地库之中。

Snipaste_2022-05-08_17-23-36.png

最后把本地库push到远程库当中,使本地与远程仓库保持一致

Snipaste_2022-05-08_17-24-43.png

解决办法

git pull --rebase origin master

该命令的意思是把远程库中的更新合并到(pull=fetch+merge)本地库中,–-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中

远程仓库和本地仓库产生关联

分支对分支

远程仓库的某个分支 - 本地仓库的某个分支

git clone  地址  克隆远程仓库中某个分支(master) 存在本地仓库 (master)

指定远程仓库的某个分支来克隆

git clone -b 分支名称 远程仓库地址 

把本地仓库指定的分支 推送到远程仓库上

git push -u 远程仓库的地址(变量) 分支名称

多人协作

设置码云 SSH 推送和拉取代码

img

背景

一些电脑系统在使用码云的时候,没有自动记录密码功能,就可能会出现频繁要求添加账号和密码的问题。 这个时候可以通过设置 ssh 来解决。

什么是 ssh

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现了设备之间的安全保障。传统远程登录或文件传输方式,例如 Telnet,FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这种方式已经慢慢不被人接受。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的登录和其他安全网络服务。目前 SSH 协议已经被全世界广泛使用,大多数设备都支持 SSH 功能

本地生成 ssh 密钥

  1. 打开 git bash 输入以下命令
ssh-keygen -t ed25519 -C 你的邮箱
  1. 然后一直按下回车键 等待以下界面 表示生命密码成功 img
  2. 打开你的码云 点击 设置 img
  3. 选择 SSH 公钥 img
  4. 回到 git bash 输入以下命令 复制你的密钥
cat ~/.ssh/id_ed25519.pub

img

  1. 回到 网页中 粘贴到这里 img
  2. 以后,在你的项目中 使用远程仓库时,不能使用 https,要修改成 ssh img
  3. 如果在已有的项目中 修改协议 可以输入
git remote  set-url origin 新的协议