初识Git(一)

violet2025/06/25

蜘蛛侠红黑桌面壁纸

TIP

0 内容介绍

1 Git概述

2 Git安装

3 Git常用命令

4 Git分支操作

5 Git团队协作机制

6 GitHub操作

0、内容介绍

Git

  • Git 介绍:分布式版本控制工具 VS 集中式版本控制工具
  • Git 安装:基于官网发布的最新版本 2.31.1 安装讲解
  • Git 命令:基于开发案例详细讲解了git的常用命令
  • Git 分支:分支特性、分支创建、分支转换、分支合并、代码合并冲突解决
  • IDEA 集成 Git

GitHub

  • 创建远程库
  • 代码推送 Push
  • 代码拉取 Pull
  • 代码克隆 Clone
  • SSH 免密登录
  • IDEA 集成 GitHub

Gitee 码云

  • 创建远程库
  • IDEA 集成 GitHub
  • 码云连接 GitHub 进行代码的复制和迁移

GitLab

  • GitLab 服务器的搭建和部署
  • IDEA 集成 GitLab

1、Git 概述

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

Git 易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性

其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具

1.1、何为版本控制?

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

版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换

image-20210916222911720

1.2、为什么需要版本控制?

个人开发过渡到团队协作

image-20210916223038071

1.3、版本控制工具

集中式版本控制工具

CVS、SVN(Subversion)、VSS.......

集中化的版本控制系统诸如 CVS、SVN 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易

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

image-20210916223444358

总结

  • 优点:可以看到其他人正在做些什么;开发者权限控制
  • 缺点:中央服务器的单点故障,无法提交历史记录

分布式版本控制工具

Git、Mercurial、Bazaar、Darcs.......

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

分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

image-20210916224708069

优点

  • 版本控制在本地,可以断网开发
  • 保存完整项目,包含历史记录,更安全

1.4、Git 简史

image-20210916225109044

1.5、Git 工作机制

image-20210916225215882

  • 工作区写代码,通过git add命令添加至暂存区
  • 暂存区临时存储代码,通过git commit提交至本地库
  • 本地库记录历史记录,通过git push推送至远程库

1.6、Git 和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库

  • 局域网
    • ☑️ GitLab
  • 互联网
    • ☑️ GitHub(外网)
    • ☑️ Gitee码云(国内网站)

2、Git 安装


官网地址:https://git-scm.com/open in new window

查看 GNU 协议,可以直接点击下一步

image-20210916233221530

选择 Git 安装位置,要求是非中文并且没有空格的目录,然后下一步

image-20210916233242454

Git 选项配置,推荐默认设置,然后下一步

image-20210916233256977

Git 安装目录名,不用修改,直接点击下一步

image-20210916233310729

Git 的默认编辑器,建议使用默认的 Vim 编辑器,然后点击下一步

image-20210916233417531

默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步

image-20210916233436237

修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git

image-20210916233458071

选择后台客户端连接协议,选默认值 OpenSSL,然后下一步

image-20210916233517370

配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步

image-20210916233531902

选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步

image-20210916233717491

选择 Git pull 合并的模式,选择默认,然后下一步

image-20210916233746777

选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步

image-20210916233757028

其他配置,选择默认设置,然后下一步

image-20210916233804540

实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install 按钮,开始安装 Git

image-20210916233812916

点击 Finsh 按钮,Git 安装成功!

image-20210916233821255

右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端

image-20210916233913106

在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功

image-20210917000255009

3、Git 常用命令

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

3.1、设置用户签名

1)基本语法

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

2)案例实操

全局范围的签名设置

image-20210917001235229

说明:

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的

Git 首次安装必须设置一下用户签名,否则无法提交代码

‼️ 注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系

3.2、初始化本地库

1)基本语法

git init

2)案例实操

image-20210917203400924

3.3、查看本地库状态

1)基本语法

git status

2)案例实操

git status

新增文件前

image-20210917204804510

新增文件后

image-20210917204858689

3.4、添加暂存区

1)基本语法

git add 文件名

2)案例实操

红色表示仍在工作区,修改尚未被追踪;绿色表示已添加至暂存区,修改被追踪

image-20210917205319556

使用命令,删除暂存区该文件(只是删除暂存区,不影响工作区)

git rm --cached hello.txt

image-20210917205546165

3.5、提交至本地库

1)基本语法

# -m 表示添加一个版本日志信息,不写此参数也会打开日志信息的文件框。一般带参数
git commit -m "日志信息" 文件名

2)案例实操

正常操作

image-20210917210542226

-m参数时

image-20210917210109185

如果强制退出

image-20210917210156460

3.6、修改文件

案例实操

image-20210917211143162

git 里是按照行维护文件的,所以修改内容其实就是之前的行删除,修改过后的行添加进来

因此在commit之后提示信息1 insertion(+), 1 deletion(-)

3.7、历史版本

查看历史版本

1)基本语法

# 查看精简版本信息
git reflog
# 查看详细版本信息
git log

2)案例实操

image-20210917211945690

版本穿梭

1)基本语法

git reset --hard 版本号

2)案例实操

image-20210917212348218

文件验证当前版本号

image-20210917212941200

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示

image-20210917213424162

image-20210917213247141

image-20210917213333350

4、Git 分支操作

image-20210917213616760

4.1、什么是分支

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

image-20210917213935209

4.2、分支的好处

同时并行推进多个功能开发,提高开发效率

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可

4.3、分支的操作

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

创建分支、查看分支

1)基本语法

git branch 分支名
git branch -v

2)案例实操

image-20210917214653546

切换分支

1)基本语法

git checkout 分支名

2)案例实操

image-20210917215246415

合并分支

1)基本语法

git merge 分支名

2)案例实操

正常合并

image-20210917215908842

冲突合并

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

image-20210917220923478

解决冲突

image-20210917221121233

image-20210917221239011

image-20210917222018377

创建分支和切换分支图解

image-20210917221451896

image-20210917221515718

master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针

  • HEAD 如果指向 master,那么我们现在就在 master 分支上
  • HEAD 如果指向 hotfix,那么我们现在就在 hotfix 分支上

所以切换分支的本质就是移动HEAD指针

5、Git 团队协作机制

5.1、团队内协作

image-20210917222216595

5.2、跨团队协作

image-20210917222441407

6、GitHub 操作

PS:全球最大同性交友网站,技术宅男的天堂,新世界的大门,你还在等什么?

账号姓名验证邮箱
atguiguyuebuqun岳不群atguiguyuebuqun@aliyun.com
atguigulinghuchong令狐冲atguigulinghuchong@163.com
atguigudongfang1东方不败atguigudongfang1@163.com

6.1、创建远程仓库

image-20210917223235275

6.2、远程仓库操作

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

创建远程仓库别名

1)基本语法

git remote -v
git remote add 别名 远程地址

2)案例实操

image-20210917225451875

推送本地分支到远程仓库

1)基本语法

git push 别名 分支

2)案例实操

由于 GitHub 外网的特殊原因,会有网络延迟,等待时间可能较长,属于正常现象。可能要多尝试几次,需要点耐心。当然你有工具除外

git push git-demo master

如果本地还没有过 SSH 免密登录操作(下面内容会详细介绍),则在执行命令后会弹出一个Connect to GitHub的提示框

image-20210918224448045

点击Sign in with your browser后会自动打开系统默认浏览器

如果你的 GitHub 尚未进行过任何 Git 相关授权,则会给出确认授权提示信息,点击Authorize GitCredentialManager进行授权即可

image-20210918231341801

接着会提示授权成功(如果在此之前已经对Git Credential Manager进行过授权,则直接提示此信息)

image-20210918224627107

成功推送本地分支至远程库

image-20210918224403240

凭据管理器

在上述操作过程中,点击Authorize GitCredentialManager进行授权后,在 GitHub 设置页面的Application选项—Authorized OAuth Apps中可以查看到 Git Credential Manager的授权信息

image-20210918231735259

在上述过程前,本地凭据管理器中还没有任何身份凭证信息(没有 Git 和 GitHub 相关的凭据信息)

image-20210918230512316

执行过上述命令等操作后,本地凭据管理器中会出现 Git 相关凭据信息

image-20210918233953904

拉取远程仓库到本地

1)基本语法

git pull 别名 分支

2)案例实操

image-20210918234422490

克隆远程仓库到本地

1)基本语法

git clone 远程库地址

2)案例实操

首先获取需要克隆的远程库地址

image-20210918235159899

由于workspace下面已经存在一个同名的仓库地址,所以直接在workspace中键入命令会有错误提示信息

image-20210918235519853

这是因为,clone命令默认帮我们创建的一个远程仓库名称同名的文件夹,所以这里我删除了git-demo目录

image-20210918235857263

小结:clone 会做如下操作

  • 1、拉取代码
  • 2、初始化本地仓库
  • 3、创建别名(默认origin

6.3、团队内协作

如果项目之外成员想要将自己编写的代码推送至远程库,则会提示unable to access...403

image-20210919002334885

要想获取推送的权限,则需要该项目管理员对该成员进行邀请,将其添加至该项目中

1)邀请合作者,输入用户名,复制地址并发送给合作者

image-20210919001646877

image-20210919001732944

image-20210919001847491

2)合作者访问该链接,点击接受邀请,可以在其账号上看到该远程仓库

image-20210919002022667

image-20210919002239871

接下来,就可以通过git命令对远程库进行克隆、拉取、提交、推送等操作了

6.4、跨团队协作

1)合作者视角

点击Fork,将其他项目“叉”到自己账号上

image-20210919003412417

自己账号上就有了该项目,可以清楚地看到该项目forked from xxx,即可对代码进行修改

image-20210919003500235

修改代码后,点击Pull requestsNew pull request,发起拉取请求

image-20210919004019396

查看修改内容,点击Create pull request,创建拉取请求

image-20210919004334829

填写请求信息及评论内容,点击Create pull request

image-20210919004505828

创建完成

image-20210919004830149

2)项目管理员视角

可以在该项目中查看到Pull requests有一条新的记录,可以点击下方提交信息进行查看

image-20210919005217558

想要看到合作者修改的具体内容,可以点击提交记录进行查看

image-20210919005303909

image-20210919005442954

同时,可以对拉取请求进行审查和评论

image-20210919005558618

最后,审查通过就可以对拉取请求进行合并了,点击Merge pull request进行合并

image-20210919005831430

点击Confirm merge,确认合并

image-20210919005854745

合并成功之后,项目成员就可以看到修改的相关内容了

6.5、SSH 免密登录

1)基本语法

# -t指定加密算法,-C添加注释
ssh-keygen -t rsa -C 描述

2)案例实操

本地生成 SSH 密钥

键入命令,连敲三次回车即可

image-20210919011352497

进入~/.ssh目录,复制公钥信息

image-20210919011953686

GitHub 上添加公钥

未添加任何公钥之前,CodeSSH会有警告提示信息,表示目前 SSH 方式是没有权限的

image-20210919014241528

在 GitHub 的settingsSSH and GPG keys中,点击New SSH key添加一个公钥

image-20210919012856831

id_rsa.pub即公钥信息粘贴至Key中,Title随意,点击Add SSH key进行添加

image-20210919013103108

出现下列信息,说明添加成功

image-20210919013731928

验证 SSH免密登录 是否可用

进入git-demo项目,点开CodeSSH,发现已经没有警告提示信息了,表示可用

image-20210919014010529

复制 SSH 协议地址,使用clone命令克隆到本地,键入yes即可

image-20210919015207022

接下来就是修改内容、添加暂存区、提交本地库、推送远程库的操作了

这时候我们发现已经不再弹出登录授权的提示信息,就可以推送过去了

image-20210919015907992

查看远程库历史版本信息,确认推送成功

image-20210919020511037

至此,SSH 免密登录配置成功!

最后更新时间 6/25/2025, 6:48:45 AM