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

git的理解与使用

本地的git

git除了最经典的add commit push用来做版本管理,其实他的分支管理也非常强大

可以说你学好了分支管理,就可以完成团队的配合协作了

git仓库

我们可以使用git init来初始化一个git仓库,只要能看见.git文件夹,就代表这是一个git仓库了

image.png

git分区

git一共有三个分区,工作区、暂存区、版本库

工作区

.git文件夹在相同目录即为工作区,也就是我们写代码的地方

暂存区与版本库

这两个分区实际上是存在.git文件夹里的

在这里插入图片描述

当我们使用add之后,代码就会被存储在暂存区,只有commit之后,也就是提交代码,整个代码才会被放入版本库,也就是上图的master文件夹中

我们也可以偷看一下.git文件夹,需要注意的是,我们绝不能更改.git文件夹的任何内容

image.png

在整个git目录中,我们不需要全部搞明白,只需要抓住几个核心文件即可

  • objects:这是一个对象目录,存储的是git对象,Git进行版本管理的核心不是将文件全部备份,而是只记录修改的部分,当工作区代码修改后,会将修改的内容写入obj库中的一个新git对象中,因此暂存区和版本库存的不是数据本身,而是git对象的索引,以便快速定位与修改
  • index:暂存区,add之后就会更新这里的内容,我还没有add所以并没有这个文件夹
  • /refs/heads/master:这是当前master分支(版本库)的最新一次提交的id索引,在每一次提交的内容中都会保存上一次提交的索引id,因此整个版本库就像一个链表一样
  • HEAD:这是一个指针,用于指向当前我们处于版本库的哪一个位置,也就是在链表的哪一个节点

git 本地常用命令

add commit这里就不说了,分别就是将文件保存到暂存区和提交到版本库

  • 查看工作区与暂存区代码差异:git diff [file]
  • 查看版本库与工作区代码差异:git diff head -- [file]
  • 查看提交记录:git log

image.png

commit后面那一串代码是提交的ID,每一次的提交ID都是独一无二的,确保我们可以进行版本回退

版本回退

版本回退是比较复杂的,核心是使用git reset [--soft | --mixed | --hard] [HEAD] 实现的

我们核心理解的是,版本回退指的是将版本库中的内容进行回退,工作区和暂存区是否回退则由参数决定

  • –mixed 是默认选项,会将暂存区的内容回退,工作区不变
  • –soft 是工作区和暂存区都不回退
  • –hard 是暂存区和工作区都回退,当工作区有未保存备份提交的代码时不要使用这个选项!否则工作区代码无法找回!
  • HEAD选项是标识当前版本 HEAD^ 标识上一个版本 HEAD^^ 标识上两个版本,可以依次类推,也可以直接写上面的提交ID,回退到指定版本

如果不小心全部回退到目标版本之前的某个版本了,这时git log是无法找到目标版本的提交ID了,需要使用git reflog,查看所有提交的命令,再利用ID回退到目标版本即可

删除文件

git rm 删除工作区和暂存区的文件

撤销修改
  1. 撤销工作区的修改:git checkout -- [file] 将工作区文件恢复到最近一次add或commit的状态
  2. 撤销工作区和暂存区的代码:使用git reset --mixed [HEAD],会将暂存区和版本库的代码进行回退,工作区不变,变为第一种情况
  3. 全部回退:git reset --hard [HEAD],前提是不能push,因为推送到远端仓库后再回退其实就意义不大了,本身就是为了避免不影响远端仓库的

分支管理

master分支或者main分支为主分支,一般大型项目都不在主分支上,分支就像是分身一样,写不同部分的代码,最后合并就是完整的项目,因此我们也可以进行分支的创建、切换、合并

在这里插入图片描述

比如我们现在创建一个dev分支,我们可以把这个时间线画出来

创建分支git branch [name],查看分支git branch

在这里插入图片描述

image.png

星号就标识我们当前所处的分支

使用git checkout [name]可以切换分支

在这里插入图片描述

image.png

我们可以在dev分支中创建文件,编写代码

写好后我们切换到master分支,会发现工作区的文件和代码并没有改变

在dev分支合并之前,master主分支都不会收到影响

这是因为dev分支的新提交对于master分支来说是完全不可见的

那要进行部署上线,就需要合并分支,可以利用git merge [name]进行分支合并

需要注意的是,这个name指的是需要将name分支合并到当前所在分支

例如当前是master分支,使用git merge dev是将dev分支合并到master分支

合并分支之后分支并没有删除,仍然可以继续开发,因此合并也可以用来同步各个分支的代码

如果某个分支没有用了,就可以使用git branch -d [name]删除指定分支

在这里插入图片描述

如果两个分支是两个团队在维护,并且他们都对同一个文件进行修改了,合并会发现有冲突,就像下面这样

在这里插入图片描述

这种情况下git会提示我们哪些文件有冲突,我们需要手动修改保留代码,然后再进行一次add和commit,就可以解决冲突了

Fast forword模式

这是一种分支合并的模式,在这种模式下,删除分支后查看分支历史时,就无法查看到以前的分支信息了,我们无法直到这个最新提交是merge来的还是commit来的

但是我们在解决冲突之后再commit一次,这样就不是fast forword模式了,就能看出分支信息了

git也可以强制禁用 fast forword git merge -no-ff -m "合并" [name]

这样就会自动生成新的commit,就能看到分支信息了

这里需要边操作边理解画图,才能更好理解

分支管理策略

一般来说master分支是最稳定的,也就是服务部署的分支,然后是dev开发分支,开发分支可以再继续细分到具体的某个人,如果开发只有你一个人来包揽也是可以的,类似的还有feature分支

image.png

如何管理和实践还是因人而异了

master分支遇见BUG怎么办

master分支突然遇到bug,有两种解决的思路

第一种是直接在master上开一个新的bug分支,然后再改bug,改好之后直接合并,最后删除bug分支

第二种是需要在dev分支上修,但是dev分支上还有未完成的工作,我们就可以使用git stash将当前工作区文件信息进行存储,然后修bug,修好之后给push回去,之后再使用git stash list可以查看内容,用git stash pop恢复即可

远端的git

其实远端的git是用于合作用到的更多,例如github,gitee都是代码托管平台,相当于免费给了一个远程的代码存储服务器

我们在push和pull的时候其实就是和远端的git仓库进行互动,将本地的所有git信息发到远端去了

但是在多人协作时,还是要优先使用pull,将其他人的代码拉下来,再进行push,要提前在本地解决好冲突才行

git标签

试想一下这样的场景, 公司在团队协作开发项目时, commit提交了上万次, 但是此时你想要回滚到某个特定的commit版本, 你怎么应对? 难道一个一个的去找吗? 难受, 实在是难受

理解标签

标签tag可以理解为对某次commit的一个标识, 相当于为此次commit取别名, 例如在项目发布某个版本时, 可以给最近一次commit打上v1.0的标签,这样下次需要回滚到1.0版本的提交时, 就不需要查看log了, 只需要查看tag标签即可定位

常用指令如下

  • 创建标签:git tag [name],如: git tag v1.0
    • 此标签默认打在最新一次提交的commit id上
  • 查看所有标签:git tag
  • 给标签标注信息: git tag -a [name] -m "信息"
  • 查看标签信息:git show [标签名]
  • 删除标签:git tag -d [标签名]
  • 推送标签至远端服务器:git push origin v1.0
  • 推送所有标签:git push origin --tags

相关文章:

git的理解与使用

本地的git git除了最经典的add commit push用来做版本管理,其实他的分支管理也非常强大 可以说你学好了分支管理,就可以完成团队的配合协作了 git仓库 我们可以使用git init来初始化一个git仓库,只要能看见.git文件夹,就代表这…...

Java进阶(一)

目录 一.Java注解 什么是注解? 内置注解 元注解 二.对象克隆 什么是对象克隆? 为什么用到对象克隆 三.浅克隆深克隆 一.Java注解 什么是注解? java中注解(Annotation)又称java标注,是一种特殊的注释。 可以添加在包,类&…...

zookeeper的介绍和简单使用

1 zookerper介绍 zookeeper是一个开源的分布式协调服务,由Apache软件基金会提供,主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务,帮助构建可靠的分布式系统。 Zookeeper的特点和功能…...

【学习笔记】深度学习网络-深度前馈网络(MLP)

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…...

使用Java技术开发软件详细流程

1. 需求分析 与客户沟通:与客户或项目负责人交流,了解需要开发的软件目标、功能需求、性能要求、使用场景等。例如,如果要开发一个在线购物系统,需要明确用户是否可以浏览商品、添加到购物车、下单支付等功能。收集和整理需求&am…...

Kubectl 与 Helm 详解

在 Kubernetes 生态中,kubectl 和 Helm 是两个核心工具,分别用于直接管理 Kubernetes 资源和简化应用的部署与管理。本文将深入探讨 kubectl 和 Helm 的功能、使用场景、部署与更新方式,并对比它们的优缺点。 1. Kubectl 详解 1.1 什么是 Kubectl? kubectl 是 Kubernetes…...

uni-app 程序打包 Android apk、安卓夜神模拟器调试运行

1、打包思路 云端打包方案(每天免费次数限制5,最简单,可以先打包尝试一下你的程序打包后是否能用): HBuilderX 发行App-Android云打包 选择Android、使用云端证书、快速安心打包本地打包: HBuilderX …...

全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析

本文介绍了我在 DOCA 开发环境下对 DPU 进行测评和计算能力测试的一些真实体验和记录。在测评过程中,我主要关注了 DPU 在高并发数据传输和深度学习场景下的表现,以及基本的系统性能指标,包括 CPU 计算、内存带宽、多线程/多进程能力和 I/O 性…...

AI学习(vscode+deepseek+cline)

1、网页生成不成功时,直接根据提示让模型替你解决问题 2、http://localhost:3000 拒绝链接时,cmd输入命令InetMgr,网站右键新建-配置你的网页代码物理地址,这里我还输入本机登录名及密码了,并把端口地址由默认80修改为…...

速通 AI+Web3 开发技能: 免费课程+前沿洞察

AI 正以前所未有的速度重塑各行各业,从生成式模型到大规模数据处理,AI 逐渐成为核心驱动力。与此同时,Web3 去中心化技术也在重新定义信任、交易和协作方式。当这两大前沿技术相遇,AI Web3 的融合已不再是理论,而是未…...

使用LPT wiggler jtag自制三星单片机(sam88 core)编程器-S3F9454

写在前面 新年好,各位,今天来分享制作一个三星单片机的编程器 嘿嘿,x鱼垃圾佬元件库有些三星单片机s3f9454,编程器不想买,基本拿来拆件玩的。但,前些时候csdn下载到它的编程时序,自己来做个编程…...

【Unity3D】《跳舞的线》游戏的方块单方向拉伸实现案例

通过网盘分享的文件:CubeMoveMusic.unitypackage 链接: https://pan.baidu.com/s/1Rq-HH4H9qzVNtpQ84WXyUA?pwda7xn 提取码: a7xn 运行游戏点击空格动态创建拉伸的方块,由Speed控制速度,新方向是随机上下左右生成。 using System.Collect…...

Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件

地址:https://github.com/MartinxMax/Chameleon Chameleon 跨平台编译C文件,并一次性生成多个平台的可执行文件。可以通过编译Chameleon自带的.C文件反向Shell生成不同平台攻击载荷。 登录 & 代理设置 按照以下步骤设置 Docker 的代理: 创建配置目…...

解读2025年生物医药创新技术:展览会与论坛的重要性

2025生物医药创新技术与应用发展展览会暨论坛,由天津市生物医药行业协会、BIO CHINA生物发酵展组委会携手主办,山东信世会展服务有限公司承办,定于2025年3月3日至5日在济南黄河国际会展中心盛大开幕。展会规模60000平方米、800参展商、35场会…...

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…...

Python从0到100(八十五):神经网络与迁移学习在猫狗分类中的应用

在人工智能的浩瀚宇宙中,深度学习犹如一颗璀璨的星辰,引领着机器学习和计算机视觉领域的前沿探索。而神经网络,作为深度学习的核心架构,更是以其强大的数据建模能力,成为解决复杂问题的重要工具。今天,我们…...

git常用命令学习

目录 文章目录 目录第一章 git简介1.Git 与SVN2.Git 工作区、暂存区和版本库 第二章 git常用命令学习1.ssh设置2.设置用户信息3.常用命令设置1.初始化本地仓库init2.克隆clone3.查看状态 git status4.添加add命令5.添加评论6.分支操作1.创建分支2.查看分支3.切换分支4.删除分支…...

vue中使用jquery 实现table 拖动改变尺寸

使用 CDN , 降低打包文件的大小在index.html中 <script src"https://.../cdns/jquery-1.12.4.min.js"></script>在 Vue 中使用 jQuery 一旦你引入 jQuery&#xff0c;你可以在 Vue 实例中使用它。有两种主要方式&#xff1a; 1. 使用全局变量 $ jQue…...

Linux的基本指令(上)

1.ls指令 语法&#xff1a;ls [选项] [目录或文件] 功能&#xff1a;对于⽬录&#xff0c;该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件&#xff0c;将列出⽂件名以及其他信息。 常用选项&#xff1a; -a 列出⽬录下的所有⽂件&#xff0c;包括以 . 开头的隐含⽂件。 -d 将…...

【单链表算法实战】解锁数据结构核心谜题——相交链表

题目如下&#xff1a; 解题过程如下&#xff1a; 相交链表只可以在中间任意位置/头/尾结点相交&#xff0c;如下图&#xff1a; 一个next指针只能指向一块地址&#xff0c;所以不会出现这种情况&#xff1a; 在返回相交链表的起始结点之前先要判断两个链表是否相交&#xff0…...

HTTP 配置与应用(不同网段)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新校园网设计。 我是一个萌新小白&#xff0c;有误地方请大家指正&#xff0c;谢谢…...

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法&#xff0c;在人脑里&#xff0c;我们有轴突连接神经元&#xff0c;在算法中&#xff0c;我们用圆表示神经元&#xff0c;用线表示神经元之间的连接&#xff0c;数据从神经网络的左侧输入&#xff0c;让神经元处理之后&#xff0c;从右…...

政安晨的AI大模型训练实践三:熟悉一下LF训练模型的WebUI

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 目录 启动WebUI 微调模型 LLaMA-Factory 支持通过 WebUI 零代码微调大语言模型。 启动Web…...

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游数据如何落…...

【深入理解SpringCloud微服务】Sentinel规则持久化实战

Sentinel规则持久化实战 Sentinel规则推送模式原始模式pull&#xff08;拉模式&#xff09;push&#xff08;推模式&#xff09; 实现拉模式实现推模式 Sentinel规则推送模式 原始模式 原始模式由Sentinel控制台直接推送规则到Sentinel客户端&#xff0c;Sentinel客户端将规则…...

三高“高性能、高并发、高可靠”系统架构设计系列文章

目录 高并发系统的艺术&#xff1a;如何在流量洪峰中游刃有余 《数据密集型应用系统设计》读后感与高并发高性能实践案例 系统稳定性与高可用保障的几种思路 软件系统限流的底层原理解析 技术解决方案调研 延迟队列调研 重试调研 异步回调调研 分库分表调研 分布式事…...

ray.rllib-入门实践-11: 自定义模型/网络

在ray.rllib中定义和使用自己的模型&#xff0c; 分为以下三个步骤&#xff1a; 1. 定义自己的模型。 2. 向ray注册自定义的模型 3. 在config中配置使用自定义的模型 环境配置&#xff1a; torch2.5.1 ray2.10.0 ray[rllib]2.10.0 ray[tune]2.10.0 ray[serve]2.10.0 numpy1.23.…...

C语言小项目——通讯录

功能介绍&#xff1a; 1.联系人信息&#xff1a;姓名年龄性别地址电话 2.通讯录中可以存放100个人的信息 3.功能&#xff1a; 1>增加联系人 2>删除指定联系人 3>查找指定联系人的信息 4>修改指定联系人的信息 5显示所有联系人的信息 6>排序&#xff08;名字&…...

C#牵手Blazor,解锁跨平台Web应用开发新姿势

一、引言 在当今数字化时代&#xff0c;Web 应用已成为人们生活和工作中不可或缺的一部分 &#xff0c;而开发跨平台的 Web 应用则是满足不同用户需求、扩大应用影响力的关键。C# 作为一种强大的编程语言&#xff0c;拥有丰富的类库和强大的功能&#xff0c;在企业级开发、游戏…...

PCIE模式配置

对于VU系列FPGA&#xff0c;当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时&#xff0c;等同于K7系列中的AXI Memory Mapped To PCI Express IP。...