当前位置: 首页 > news >正文

29.Git版本控制工具

1.Git简介

Git是一开源的分布式版本控制系统,提供了存储代码、管理版本历史、分支和合并等功能。

  • 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程中的每个版本,记录每个版本的修改历史、版本号和发布日期等信息,以便更好地管理代码和文档,并帮助开发人员更好地协作和开发软件。

  • 通过版本控制,开发人员可以随时回滚到之前的稳定版本,恢复错误或进行分支开发等操作,以便更好地管理软件开发过程中的变化和风险。

  • 版本控制通常与版本控制系统(Version Control System,VCS)相关联,如Git、SVN等。这些系统提供了存储代码、管理版本历史、分支和合并等功能,帮助开发人员更好地协作和管理软件开发过程中的版本变化。

2.版本控制的发展历史

早期的版本控制系统是本地化管理的,采用某种简单的数据库记录文件的历次更新差异。但随着合作开发和协调工作的需要,集中式的版本控制系统(CVCS)出现了。

不同的开发人员通过客户端连接到集中管理的服务器上,提交或读取最新的文件,比如常用的SVN就是这种工作模式。

2.1 集中化的版本控制系统

集中化版本控制系统,是通过一个集中管理的中央服务器,来保存所有文件修改的历史版本,而协同开发者通过客户端连接到这台服务器,从服务器上同步更新或上传自己的修改。

图片

  • 在集中式的版本控制系统中,管理员可以轻松管控每个开发者的权限,并且维护成本低。

  • 但是这种架构下集中式服务器存在明显的单点故障,如果版本控制服务器宕机,则无法提供服务。

  • 如果服务器数据丢失并且无法恢复,那么整个项目的数据和变更历史也随之丢失。

2.2 分布式版本控制系统

为解决以上问题出现了分布式版本控制系统(DVCS),其基本设计理念是客户端不仅仅提取最新版本的快照,而是把代码仓库完整的镜像下来,相当于在本地有一份完整的数据拷贝。这样,当CVS服务器故障时,通过任何一个本地的镜像仓库就可以恢复数据。同时还可以和不同的远端代码仓库进行交互,设置不同的协作流程。

图片

  • 用户在本地就可以查看所有的历史版本信息,当用户进行修改提交文件的时候,需要进行远程更新或提交。

  • 用户即使离线时页可以进行本地提交,push推送到远程服务器才需要联网。

  • 每个用户都保存了历史版本,所以只要有一个用户设备没问题,就可以恢复数据。

3.Git的相关概念

3.1 工作区域

工作区域说明
Workspace用户电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。
Index/Stage暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放未提交的改动。比如:执行git add,这些改动就添加到这个区域。
Repository本地仓库,是一个存放在本地的版本库。
Remote远程仓库,就是远程数据交换的仓库。比如:github,码云等代码托管平台所提供的仓库。

Git的工作流程如下:

1)从远程仓库中克隆代码到本地仓库

2)从本地仓库中checkout代码然后进行代码修改

3)在提交前先将代码添加到暂存区

4)将暂存区的代码提交到本地仓库,本地仓库中保存修改的各个历史版本

5)修改完成后,需要和团队成员共享代码时,将代码push到远程仓库

image-20230726154240620

4.Git下载与安装

Git - Downloadshttps://git-scm.com/download

5.环境配置

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

5.1 设置用户信息

git config --global user.name "han"

git config --global user.email "han@woniu.com"

5.2 查看配置信息

git config --list

git config user.name

通过上面的命令设置的信息会保存在~/.gitconfig文件中

6.初始化仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库,获取Git仓库通常有两种方式:

        在本地初始化一个Git仓库

        从远程仓库克隆

6.1 在本地初始化一个Git仓库

git init

6.2 从远程仓库克隆

        可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地。

        命令形式为:git clone 远程Git仓库地址

git clone https://gitee.com/project.git

        切换进入远程仓库的账号

git config --system --unset credential.helper        

7. 本地仓库的操作

         首先我们在工作区新建一个Hello.java文件。

7.1 加入暂存区

git add Hello.java

7.2 查看文件的状态

git status

git status -s #输出简介信息 

image-20230726161101476

Git中文件有4种状态:

根据一个文件是否已加入版本控制,可以把文件状态分为:

        Tracked已跟踪(被纳入版本控制),而tracked(已跟踪)又包括三种工作状态:

                Unmodified 未修改状态

                Modified 已修改状态

                Staged 已暂存状态

        Untracked未跟踪(未被纳入版本控制)

7.3 移除暂存区

git reset Hello.java # 将暂存区的文件取消暂存

7.4 提交到本地仓库

在提交到本地仓库之前,要先将文件添加到暂存区,然后在commit提交到本地仓库 。

git commit -m "初始化提交Hello.java" hello.java           # 将暂存区的文件提交到本地仓库

7.5 直接提交到本地仓库

        注意:commit -am 只对修改和删除有效,对于新增的文件还是先要执行add操作。

git commit -am "提交修改"         # 不经过暂存区,直接提交本地仓库

7.6 删除文件

git rm Hello.java                                       # 删除文件

7.7 提交删除

git commit -m "delete commit"                           # 将删除的文件提交本地仓库

7.8 忽略列表

        一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

7.9 查看日志

git log

  • commit(提交)比较多,git log 的内容在一页显示不完整,满屏放不下的时候,就会显示冒号。

  • 回车(往下滚一行)、空格(往下滚一页)可以继续查看剩余内容。

  • 退出:英文状态下 按 q 可以退出git log 状态。

7.10 回滚操作

git log                   //查看提交历史,找出要回滚到的commit-id

git reset --hard commit-id //回滚到commit-id

git reset --hard HEAD~1   //将最近1次的提交回滚  

8.远程仓库的操作

8.1 从远程仓库克隆

        如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

 git clone https://gitee.com/woniuxy2021/myproject.git     # 从远程仓库克隆到本地仓库

8.2 添加远程仓库

        运行 git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写。

git remote add origin https://gitee.com/p.git # 将本地仓添加一个新的远程Git仓库(关联)

8.3 查看远程仓库

        如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令。 它会列出指定的每一个远程服务器的简写。 如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字。

git remote                                            # 查看远程仓库
git remote show origin                                # 查看远程仓库输出更详细的信息

8.4 推送到远程仓库

        推送代码到远程仓库的分支

git push origin master     # 将本地仓库的代码推送到远程仓库

8.5 拉取

        git pull 是从远程仓库获取最新版本并merge到本地仓库。

git pull origin master # 从远程仓库中拉取代码(自动合并)

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

git pull origin master --allow-unrelated-histories //加上后面这个选项允许不相关历史提交

8.6 移除远程仓库

        如果因为一些原因想要移除一个远程仓库 ,可以使用 git remote rm命令

git remote rm origin # 将本地仓库跟远程仓库的关联移除

        注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库。

9.分支操作

        Git一般都是存在多个分支的,比如:开发分支,回归测试分支以及主干分支等。

        使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。开发人员在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

        git init 命令会默认创建master分支。

9.1 新建分支

git checkout -b dev 新建一个分支,并且切换到新的分支dev

git branch dev 新建一个分支,但是仍停留在原来分支

9.2 查看分支

 git branch   查看本地所有的分支

git branch -r 查看所有远程的分支

git branch -a 查看所有远程分支和本地分支

9.3 切换分支

        注意:git在切换分支之前要确保当前分支没有未提交的修改,将当前分支内容进行commit之后再切换到其他分支。

git checkout dev 切换到dev分支

9.4 推送到远程仓库分支

 git push origin dev   # 推送至远程仓库分支

9.5 合并分支

        在dev分支上进行开发完成之后,需要把dev开发分支上的代码合并到master主分支上。

        首先切换到master分支

git checkout master

        将dev分支合并到master分支

git merge dev

        将master分支推送到远程仓库

git push origin master

9.6 删除分支

git branch -D <branchname>  删除本地branchname分支

10.IEDA集成Git

10.1 配置Git的路径

image-20230726224542887

10.2 创建工程并添加到Git

image-20230726224808403

image-20230726224858675

image-20230726231923421

10.3 将文件添加到暂存区

10.3.1 添加忽略列表

# .idea目录下面所有的文件
.idea/
# 忽略指定文件
git_test.iml
# 忽略编译后的文件
target/

10.3.2 添加到暂存区

image-20230726232522221

10.3.3 提交文件

image-20230726232628055

image-20230726232832241

10.5 将代码推送到远程仓库

image-20230726233039107

因为是新建的本地仓库,推送到远程仓库的时候,需要定义远程仓库。

image-20230726233146280

image-20230726233320974

image-20230726233757914

10.5 从远程仓库克隆工程到本地

image-20230726234141552

10.6 代码的推送/拉取

A开发者端:

(1)创建Hello.java

(2)添加、提交、推送

B开发者端:

(1)拉取代码

(2)修改代码、添加、提交、推送

(3)A开发者端从远程仓库更新代码

10.7 创建分支并切换分支

image-20230727000800124

image-20230727000832621

10.8 推送分支到远程仓库

        在dev分支上开发代码,并推送到远程仓库。

image-20230727001144366

image-20230727001025836

10.9 合并分支

image-20230727001650729

相关文章:

29.Git版本控制工具

1.Git简介 Git是一开源的分布式版本控制系统&#xff0c;提供了存储代码、管理版本历史、分支和合并等功能。 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理&#xff0c;是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程…...

【算法题】2790. 长度递增组的最大数目

题目&#xff1a; 给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。 你的任务是使用从 0 到 n - 1 的数字创建若干组&#xff0c;并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外&#xff0c;还必须满足以下条件&#xff1a; 每个组必须…...

Qt设置开机自启动无法读取配置文件

问题&#xff1a; Qt5.9.4再注册表中加入开机自启动后&#xff0c;每次开机可以启动&#xff0c;但是无法读取配置文件 解决方案 再main()方法中加入QDir::setCurrent(QCoreApplication::applicationDirPath());即可。 static void AutoRunWithSystem(bool bAutoRun) {// 获取…...

解决Font family [‘sans-serif’] not found问题

序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具&#xff1a; WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接&#xff0c;编辑工具是 Visual Studio Code 一、字体…...

C语言进阶-2

1、多文件C语言项目 1.1、简单的C语言程序&#xff08;项目&#xff09; 只有一个C文件(a.c)&#xff0c;编译的时候gcc a.c -o a&#xff0c;执行的时候./a 1.2、复杂的C语言程序&#xff08;项目&#xff09; 是由多个C文件构成的。例如一个项目中包含2个c文件&#xff08;…...

Zabbix监控之分布式部署

文章目录 Zabbix监控之分布式部署zabbix proxy概述部署zabbix-proxy节点规划基础环境准备安装proxy以及数据库配置数据库添加服务端host解析修改zabbix-proxy配置文件启动代理服务器 zabbix页面(1)在zabbix页面添加代理(2)zabbix-agent连接proxy Zabbix监控之分布式部署 zabbi…...

vue2企业级项目(七)

vue2企业级项目&#xff08;七&#xff09; 组件封装 src目录下创建components/index.js const components require.context("./modules", true, /index\.js$/);export default {install: (Vue) > {components.keys().forEach((key) > {let component compo…...

PDPS教程:导出带颜色的JT格式2D布局图文件的另一种方法

目录 概述 布局图平面化与边缘化处理 导出为JT格式文件 JT格式文件查看 概述 在PDPS软件中导入机器人生产线或工作站2D布局图之前&#xff0c;要先将布局图文件转换为JT格式。 使用Crossmanager软件转换出来的2D布局图文件会将图形元素原有的颜色自动修改为黑白颜色&…...

AI面试官:Asp.Net 中使用Log4Net (二)

AI面试官&#xff1a;Asp.Net 中使用Log4Net (二) 当面试涉及到使用log4net日志记录框架的相关问题时&#xff0c;通常会聚焦在如何在.NET或.NET Core应用程序中集成和使用log4net。以下是一些关于log4net的面试题目&#xff0c;以及相应的解答、案例和代码&#xff1a; 文章目…...

C# Solidworks二次开发:向量相关的数学函数API的使用介绍

今天要讲的是Solidworks二次开发时候&#xff0c;如何使用一些与数学相关的API方法的介绍&#xff0c;在Solidworks中本身提供了一个函数用于对数学对象的访问&#xff0c;函数名为MathUtility。借助这个函数&#xff0c;我们来引出今天要介绍的几个API。 &#xff08;1&#…...

table 导出表格 Excel

在请求中需要设置 responseType: blob export const requestExport (api, method, params {}, config) > {const apiToken localStorage.getItem(token);const data method GET ? params : data;let headers {BackServer-Token: ${apiToken},};if (config?.headers…...

基于 Flink SQL CDC 数据处理的终极武器

文章目录 一、传统的数据同步方案与 Flink SQL CDC 解决方案1.1 Flink SQL CDC 数据同步与原理解析1.2 基于日志的 CDC 方案介绍1.3 选择 Flink 作为 ETL 工具 二、 基于 Flink SQL CDC 的数据同步方案实践2.1 CDC Streaming ETL2.2 Flink-CDC实践之mysql案例 来源互联网多篇文…...

uniapp使用HQChart的k线,用webSocket更新数据

项目&#xff1a;不借用HQChart的各种接口数据&#xff0c;即数据后端返回&#xff0c;但是数据格式要和原数据格式一样。 //k线图 CreateHQChartKLine(){var chartHeightuni.upx2px(this.ChartHeight);let hqchartCtrlthis.$refs.HQChartCtrl;hqchartCtrl.KLine.Option.Type&…...

idea的Plugins中搜索不到插件

1、ctrlalts 打开设置 ; 2、搜索框输入plugins; 3、点击plugins; 4、点齿轮按钮&#xff0c;选择HTTP Proxy settings; 如下操作&#xff1a; 5、刷新DNS&#xff0c;ipconfig /flushdns 6、重新打开idea 的plugins 插件列表出来了...

flask 实现简单的登录系统demo

你提供的代码是一个基本的Flask应用程序&#xff0c;实现了一个简单的登录系统。以下是代码的详细解释&#xff1a; 1. 导入必要的模块&#xff1a;os 用于生成密钥&#xff0c;Flask 用于创建Web应用程序。 2. 创建Flask应用程序的实例&#xff0c;并为会话管理设置一个密钥。…...

Spring Security安全配置

使用Spring Boot与Spring MVC进行Web开发时&#xff0c;如果项目引入spring-boot- starter-security依赖启动器&#xff0c;MVC Security 安全管理功能就会自动生效&#xff0c;其默认的安全配置是在SecurityAutoConfiguration和UserDetailsServiceAutoConfiguration中实现的。…...

2023Java后端开发之100道常见经典面试题

目录 1.重载和重写的区别? 2.String 和 StringBuffer、StringBuilder 的区别是什么&#xff1f; 3. 与 equals 的区别&#xff1f; 4.抽象类和接口的区别是什么&#xff1f; 5. 面向对象的特点 6.Collection 和 Collections 有什么区别&#xff1f; 7.List、Set、Map 之…...

Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用

目录 1、安装命令2、应用场景3、优缺点4、案例分析5、各个开发语言如何应用&#xff1f; Redis 是一个基于内存的开源数据库系统&#xff0c;被广泛应用于 Web 应用、消息队列、缓存、实时统计等领域。下面是 Redis 的详解&#xff0c;包括安装命令、应用场景和优缺点&#xff…...

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热&#xff0c;在全球掀起一阵生成式AI&#xff08;AIGC&#xff09;热潮。国外的OpenAI、国内的百度等企业&#xff0c;都在AIGC上强力布局。 各种应用场景中&#xff0c;AIGC助力的数字人引起了市场注意。 事实上&#xff0c;数字人不是个新鲜事。早在1…...

mac关闭VPN之后,浏览器就不能够正常上网了(图解)

可能打开谷歌浏览器会显示无法正常连接网络等信息&#xff0c;这个时候可以按照以下步骤&#xff1a; 点击"检查代理服务器地址" 会显示以下这段话&#xff0c;按照这个步骤来操作就可以了。 打开系统偏好设置&#xff0c;点击网络 点击高级 取消掉所有已勾选代…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...

StarRocks 全面向量化执行引擎深度解析

StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计&#xff0c;相比传统行式处理引擎&#xff08;如MySQL&#xff09;&#xff0c;性能可提升 5-10倍。以下是分层拆解&#xff1a; 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...