Git企业开发

news2025/7/18 23:58:05

Git(版本控制器)

在我们对于文档进行操作的时候,很多时候可能会出现多个文档,对这些文档进行多个版本的保存和记录就变成必要的。通俗的讲,就是记录每次的修改和记录版本迭代的管理系统。目前最主流的版本控制器就是Git。 但是git无法知道二进制文件的修改和变化,只能知道大小变化,但是可以知道文本文件每次修改内容。 

在Ubuntu中安装Git

通过以下命令查看git的版本:

git --version

首先我们得先卸载好git才能安装。

sudo apt-get remove git -y

接着通过以下命令安装git,输入命令后就会相应下载安装包,接着就安装成功了。

sudo apt-get install git -y

在服务器上创建仓库

 在新建的Linux文件夹下创建仓库,通过git init来创建本地仓库。

git init

通过tree .git/来查看文件详情git仓库详情。

新增配置:

在这里我们需要配置自己的名字和邮箱地址:

查看一下配置信息,发现已经配置好了:

同时 我们也可以删除配置项,通过该命令删除:

git config --unset user.name

如果是配置了global选项,那就会使得当前服务器下的所有git仓库都进行配置,而不是就当前仓库。在这里就是把当前名字生效于所有仓库。

想要删除全局生效的配置,像前面加上--global就可以了。不允许在.git文件下进行修改。

在与.git/文件并列的文件中称之为工作区,.git不属于工作区。

stage:暂存区(索引)。

add:将新增的内容存入暂存区。

commit:将暂存区提交到master分支。

Head:一个指针,指向master。

objects:存放了历史版本的数据。

修改的工作区内容会写入对象库,会写入对象库的一个新的git文件中,也就是维护了所有的版本,所有修改的内容都会被管理。

添加文件:

将文件添加入暂存区,并且提交。

也可以进行多次add并且一次性提交到git仓库中。

git追踪管理的其实是修改,而不是文件。

文件撤销修改删除

如果对文件在工作区修改之后,查看文件的状态,文件就会被提示已经修改了。

显示差异:

git diff

通过git diff文件名的形式就可以查看之前暂存区和现在在工作区中的数据不同的地方。

这里的+++文件是修改后,---文件是修改前。

这里的0代表着从0行开始修改到第一行。当我们使用git add后,工作区就和暂存区内容一样了。

当我们commit之后,就可以发现已经没有分支需要提交了,工作区已经干净了。

git diff head

查看工作区和版本库有区别的地方。

版本回退:

git reset --soft --mixed --hard

回退版本库中的内容 ,哪些内容进行回退实际上

  1. soft:只回退版本库。
  2. mixed:回退版本库和暂存区。(默认选项)。
  3. hard:回退所有版本。

实际上hard要慎用,因为hard会回退所有的代码,并且找不回工作区中的代码。

打印日志就会发现已经全部不见了,,但是!这里由于我们打印过之前的版本就可以通过之前版本来再次再次回退。这时候就可以回退代码了。

git relog//记录本地每一次提交

 版本回退实际上就是将原本指向旧版本的指针进行修改。

也就是修改master的指针。

撤销修改(工作区中):

比如有这样的情况,在本地工作区发现代码写的很烂,想回复到上个版本。但是只有工作区中有内容。

git checkout-- 文件名

撤销修改(工作区和暂存区):

将当前代码回退到和版本库内容一致的情况,也就是当前版本,就可以回退到当前版本和版本库中的内容保持一致。

git reset HEAD 文件名

将暂存区中的内容进行回退到版本库中的内容一致,然后再将工作区中的内容也进行回退。

撤销修改(全部修改):

远程仓库中没有这一段代码,才可以进行撤销。

git reset --hard HEAD^

删除文件:

如果要删除文件,就要把修改操作添加到暂存区和提交到工作区,这样才能更新后续的数据。这时候在工作区和暂存区和版本库中的文件才会被删除。 

但是这里其实是有简化操作的,实际上可以通过两步,就可以完成操作,通过git提供的rm命令,通过git rm就可以删除工作区和暂存区中的数据,再通过commit命令将修改操作提交。

git的分支:

Head指向mastet,master指向最新一次的提交,也就是指向主线,当然了我们也可以创建一些其他的分支然后进行合并。

通过git branch打印现在本地有哪些分支,这里我们只先创建了master分支。

Head指针不仅仅可以指向master分支,也可以指向其他分支,被指向的分支就是当前正在工作的分支,如果正在master上工作,master前面就会有一个*号。

创建新分支

这里我们通过git branch创建一个新的分支dev,可以看到当前dev分支就被创建出来了,

切换分支

通过

git checkout 分支名

这时候head就指向了dev分支,如果想要合并的话,就可以通过merge命令进行合并,如果想要合并到master分支上,就要通过git merge操作进行合并。

合并分支

当我们在dev分支下面进行操作并且add和commit这时候切换到master分支后,发现数据不存在了,这就是因为我们没有合并。

当我们合并完其他的分支就可以看到这里的数据就已经同步了。

当然了,前提情况是别的分支已经进行了add和commit操作。

删除分支

删除分支只能在其他分支上面删除,这里我们已经切换到了master分支下面。

git branch -d dev

git上面创建,合并和删除分支很快,所以git鼓励我们使用分支,这样的分支操作和在master上面操作是一样的,但是更加安全。

强行删除

git branch -D

如果已经进行提交操作了,想把分支的内容删掉,就可以使用强制删除的方式删除。 

合并分支的冲突

当我们在合并dev1和master的时候git就不知道要保留master的ccc还是dev1的bbb,这里我们将创建以上的环境。

git checkout -b dev1

通过此命令既创建dev1的分支,又切换到dev1的目录下面,这时候再合并就会出现冲突。

打开vim文件,就可以看到以下内容:

第一个是我们当前分支的内容,第二个是dev1分支的内容。但是这里的保留内容由我们自己决定,我们可以打开文件,并且进行删除。merge冲突需要手动解决,并且需要提交。

git --no-ff -m "内容" dev1

不使用fastford模式,并且提交,最好使用no-ff模式,

--no-ff:禁用快进式合并。在默认情况下,如果当前分支的提交历史是线性的,Git 会使用快进式合并,即直接将当前分支的指针移动到被合并分支的最新提交处,不会创建一个新的合并提交。使用 --no-ff 选项后,无论是否可以快进,Git 都会创建一个新的合并提交,这样可以保留分支的合并历史,方便后续查看。


 开发人员在dev分支下面进行操作,日常开发环境,在进行测试多次之后,再合并到master主分支之上了。有了分支可以拉取多人的分支,并且进行合并,多人协作。

bug分支

线上环境会部署master主分支的代码,在master上修复如果再修复出一个更大的bug,就会有更加严重的问题。

如果开发到一半发现master线上有bug(开发还没提交),可以先使用git stash进行存储到git中,然后切换到master分支,然后新建并且切换到新的修复分支然后修复后进行merge。再切回开发分支,再通过git stash pop返回开发环境。

建议:最后合并开发的代码和修改bug代码的时候,不要在master上面合并,将dev合并master分支,在dev上面解决冲突后,再在master合并dev分支。

远程仓库 

HTTPS

克隆远程仓库从中央仓库中,查看https协议进行克隆。

将远程仓库克隆到本地仓库后进入,会发现.git版本库。

本地仓库和远程仓库的交互就通过push和pull来完成

SSH

要想使用SSH协议,必须要需要把本地公钥放到git服务器上面,个人可以在设置中配置SSH公钥,如果没有配置任何的公钥就会报错。

在用户主目录下面查看有没有.ssh文件,再查看是否已经配置公钥和私钥,

在这里虽然已经有.ssh文件了,但是实际上并没有配置公钥和私钥,以下命令配置公钥和私钥。在.ssh文件中。一路回车就可以创建好了。

ssh-keygen -t rsa -C "1632100162@qq.com" 

这里就可以看到已经创建好了这两个文件,打开pub文件,复制其中的内容,就可以拷贝公钥了。也就可以克制远程仓库了。

在本地进行推送。

本地拉取

git pull origin master:master

从远程仓库拉取,并且与本地合并代码,就可以实时更新远端代码。

git配置文件(gitignore) 

在日常开发中,有一些文件不想被提交到远端仓库,比如保存了数据库密码的文件,不想让git追踪管理的。但是在初始化我们并没有创建这个文件。

如图就是忽略以.so和.ini结尾的文件。

如果不想被忽略,就在gitignore文件中排除该文件:通过!号的形式。

git标签

可以对下一次提交进行打标签,也可以对已经提交的进行打标签,对某一次的提交进行打标签。

对git标签进行描述,并且可以通过show命令查看详情。

 删除git标签:

 推送到远程仓库:

一次性推送:

git push 仓库名 --tags

日志:

添加文件的内容的日志:

git log
git log --pretty=oneline

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2302235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepSeek预测25考研分数线

25考研分数马上要出了。 目前,多所大学已经陆续给出了分数查分时间,综合往年情况来看,每年的查分时间一般集中在2月底。 等待出成绩的日子,学子们的心情是万分焦急,小编用最近爆火的“活人感”十足的DeepSeek帮大家预…

基于springboot校园健康系统的设计与实现(源码+文档)

大家好我是风歌,今天要和大家聊的是一款基于springboot的园健康系统的设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于springboot校园健康系统的设计与实现的主要使用者管理员具有最高的权限,通…

【YOLOv8】损失函数

学习视频: yolov8 | 损失函数 之 5、类别损失_哔哩哔哩_bilibili yolov8 | 损失函数 之 6、定位损失 CIoU DFL_哔哩哔哩_bilibili 2.13、yolov8损失函数_哔哩哔哩_bilibili YOLOv8 的损失函数由类别损失和定位损失构成 类别损失:BCE Loss 定位损失…

【Linux】【网络】Libevent 内部实现简略版

【Linux】【网络】Libevent 内部实现简略版 1 event_base结构–>相当于Reactor 在使用libevent之前,就必须先创建这个结构。 以epoll为例: 1.1evbase void* evbase-->epollop结构体(以epoll为例) libevent通过一个void…

计算机网络抄手 运输层

一、运输层协议概述 1. 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&…

MATLAB图像处理:图像分割方法

图像分割将图像划分为具有特定意义的子区域,是目标检测、医学影像分析、自动驾驶等领域的核心预处理步骤。本文讲解阈值分割、边缘检测、区域生长、聚类分割、基于图的方法等经典与前沿技术,提供MATLAB代码实现。 目录 1. 图像分割基础 2. 经典分割方…

【VSCode】MicroPython环境配置

【VSCode】MicroPython环境配置 RT-Thread MicroPython 插件安装MicroPython 库文件配置结束语 RT-Thread MicroPython 插件安装 在 VSCode 拓展中搜索 “RT-Thread MicroPython” 并安装,详细配置步骤(修改 VSCode 默认终端、MicroPython 代码补全&…

【python】网页批量转PDF

安装wkhtmltopdf 网站:wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安装pdfkit库 pip install pdfkit 批量转换代码 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…

基于Flask的租房信息可视化系统的设计与实现

【Flask】基于Flask的租房信息可视化系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着互联网的快速发展,租房市场日益繁荣,信息量急剧增加&#xff…

Scrapy安装,创建Scrapy项目,启动Scrapy爬虫

Scrapy安装,创建Scrapy项目,启动Scrapy爬虫 1. 安装 Python2. 安装 Scrapy3. 验证安装4. 创建 Scrapy 项目5. 启动爬虫5.1 示例 总结 Scrapy 的安装方式比较简单,下面是基于 Python 环境的安装流程: 1. 安装 Python 首先&#x…

C++项目:高并发内存池_上

目录 1. 项目介绍 2. 内存池概念 2.1 池化技术 2.2 内存池和内存碎片 2.3 细看malloc 3. 定长内存池的实现 ObjectPool.hpp 4. 高并发内存池框架 5. thread cache测试 5.1 thread cache框架 5.2 ConcurrentAlloc.hpp 6. central cache测试 6.1 central cache框架 …

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备,该软件除了能通过电脑远程关闭另一台电脑外,您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机: 步骤1.在手机应用商店搜索“远程看看”进行软件安装,…

IO模型与NIO基础--NIO网络传输选择器--字符编码

放进NIO体系进行网络编程的工作流程: Selector的创建 通过调用Selector.open()方法创建一个Selector,如下: Selector selector Selector.open(); 向Selector注册通道 通过Channel.register()方法来实现, 注意:Chan…

【亚马逊开发者账号02】终审问题SA+review_Pre-review+Doc.xlsx

1.终审问题 你好感谢您在此过程中的回复和协作。所有想要构建具有受限 SP-API 角色的公开可用应用程序的开发人员都必须与我们的解决方案架构师团队一起完成架构审核。 这将需要详细说明应用程序的数据流、个人身份信息 (PII) 的数据保护控制&#xff0…

c++标准io与线程,互斥锁

封装一个 File 类, 用有私有成员 File* fp 实现以下功能 File f "文件名" 要求打开该文件 f.write(string str) 要求将str数据写入文件中 string str f.read(int size) 从文件中读取最多size个字节, 并将读取到的数据返回 析构函数 #…

在高流量下保持WordPress网站的稳定和高效运行

随着流量的不断增加,网站的稳定和高效运行变得越来越重要,特别是使用WordPress搭建的网站。流量过高时,网站加载可能会变慢,甚至崩溃,直接影响用户体验和网站正常运营。因此,我们需要采取一些有效的措施&am…

Cython学习笔记1:利用Cython加速Python运行速度

Cython学习笔记1:利用Cython加速Python运行速度 CythonCython 的核心特点:利用Cython加速Python运行速度1. Cython加速Python运行速度原理2. 不使用Cython3. 使用Cython加速(1)使用pip安装 cython 和 setuptools 库(2&…

web的分离不分离:前后端分离与不分离全面分析

让我们一起走向未来 🎓作者简介:全栈领域优质创作者 🌐个人主页:百锦再新空间代码工作室 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[1504566…

记录一个ES分词器不生效的解决过程

问题背景 商城项目,其中商品查询检索使用的是ES, 但存在某些商品查询不到的问题 例如:某商品名包含AA_BBB这样的关键词,但是搜索"AA"不能查询到该商品,但是将商品名修改为AA BBB后就能查询到了. 怀疑是分词的问题,但看代码,在创建ES索引时在对应字段上也定义了分词器…

高性能内存对象缓存Memcached详细实验操作

目录 前提准备: cache1,2: 客户端cache-api(一定得是LAMP环境) memcache实现主主复制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提准备: 1. 准备三台cent…