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

Git使用与管理

一.基本操作

1.创建本地仓库

在对应文件目录下进行:

git init

输入完上面的代码,所在文件目录下就会多一个名为 .git 的隐藏文件,该文件是Git用来跟踪和管理仓库的。

我们可以使用 tree 命令(注意要先下载tree插件)来查看 .git 文件的细节:

创建完后我们一定要配置配置Git,设置用户名和邮箱地址:

git config [--global] user.name "***"   
git config [--global] user.email "***"  

global是一个选择选择项,填上这个表示这台机器上所有的Git仓库都会使用这个用户名和邮箱地址。

能设置自然也能删除配置:

 git config [--global] --unset user.namegit config [--global] --unset user.email

了解完配置与删除,我们可以使用下面的命令来查看配置:

git config -l

2.工作区、暂存区、版本库(重要)

工作区:我们在本地的目录;

暂存区(stage、index):一般存放在 .git 目录下的index文件;

版本库:隐藏目录 .git 。

我们在本地,也就是工作区创建的文件,可以通过add操作将文件上传到暂存区;我们可以使用commit命令将暂存区的文件上传到版本库中。从这里也可以看出,我们新创建的文件没有经过add和commit命令是没有添加到仓库中的。

//指定文件名,可写多个,用空格隔开
git add 文件名
//所有文件
git add .

通过这里的学习也解开了我之前的疑惑,那就是我在提交文件名有空格的文件时一直报错,原来用了空格表示不是一个文件了。如果真有空格,可以使用引号括起来;也可以使用 \ 来转义空格。

git commit -m "信息"
//指定文件到版本库中
git commit 文件名 -m "信息"

这里是信息指的是本次提交的细节。

通过上面两个步骤我们就将代码提交到版本库里了。我们可以使用下面的命令来查看历史提交记录:

git log [--pretty=oneline]

--pretty=oneline 是一个可选项,加上这个会使历史提交记录显示的更加简洁。

通过上面的命令我们会得到下面的内容:

4e65c55222473e05e72338d3ba75a101a6a56d56 First commit

前面这一堆数字和字母是commit id,这个很重要,下面会说到。

在使用上面的 tree .git 命令查看,我们可以看到objects中存入了commit id。

 在最上面的那张图上我们可以看到head指向master,我们查看以下master的内容,发现:

4e65c55222473e05e72338d3ba75a101a6a56d56

其中存着的正是上面的commit id。这个master存的正是最新的commit id。

下面着重说一下objects。

对一开始那张图进行补充:

objects 为Git的对象库,里面包含了创建的各种版本库对象及内容。

我们使用:ls .git/objects/ 来查看objects中的文件:

4e  70  e6  info  pack

为什么是这个,其实从树上就能得到答案。

我们可以通过:git cat-file 命令来查看版本库中的内容:

输入下面的命令:

git cat-file -p 4e65c55222473e05e72338d3ba75a101a6a56d56

我们得到了:

tree 70ea63592ac4de5f9aec6b15273c4dd5cc0cd00f

3.修改文件

查看在上次提交之后是否有对文件进行再次修改:

git status

查看工作区文件与暂存区或版本库文件的差异:

//工作区与暂存区差异
git diff [文件]
//工作区与版本库差异
git diff HEAD -- [文件]

4.版本回退

git reset 命令用于回退版本,其后面还有几个可选项:

git reset [--soft | --mixed | --hard] [HEAD]
工作区暂存区版本库选项
原本file1、file2file1、file2file1、file2
回退后file1、file2file1、file2file1--soft
回退后file1、file2file1file1--mixed
回退后file1file1file1--hard

其中 --mixed 是默认选项。

上面表格不难理解,举个例子如果我们使用了 --soft,那么只有版本库回退了,工作区和暂存区都没有回退。

HEAD选项:

commit id回退到指定版本
HEAD表示当前版本
HEAD^表示上一个版本
HEAD~1表示上一个版本
HEAD~2表示上上一个版本

5.删除文件

删除工作区和暂存区的文件:

git rm 文件名

二.分支管理

1.分支是什么

每次commit,git会根据时间形成一条“时间线”,这条时间线就是分支。git里面有一条主分支,master分支。HEAD指向master。

2.基本操作

1)查看分支

git branch

2)创建分支

git branch 分支名

比如我们创建一个dev分支:

此时再查看分支:

3)切换分支

git checkout 分支名

切换完后,HEAD就会指向切换的分支,比如我们切换到了dev分支:

 如果这个时候我们修改了某个文件,并且add和commit了,那么就会变成这样:

如果此时我们切回master,打开刚刚修改文件,我们就会发现文件没有被修改。原因从图上也能看出,master跟dev指向的根本就不是一个东西。修改的只是dev分支的文件,master分支没有被修改。

4)合并分支

像刚刚上面的例子,只有dev分支文件被修改了,我们想要将这个修改合并到master分支。

第一步,我们要先切换到master分支。

第二步,合并:

git merge dev

5)删除分支

git branch -d 分支名

这里要注意,我们要删除某一个分支,HEAD一定不能指向这个分支,如果指向这个分支是删不了的。

还有,如果这个分支的没有被合并,这个时候使用上面的方法是删不掉分支的,我们要这样写强制删除分支:

git branch -D 分支名

3.合并冲突

我们在dev分支修个了file1文件,同时也在master分支修改了file1文件,如果将这两个分支合并就会发生冲突,git根本就不知道该听谁的,是要dev分支的修改还是master分支的修改。这就是合并冲突。

我们的解决办法也很原始,手动删。

当出现冲突报错后,再打开file1文件就会发现文件内容变成这样了:

 <<< ==== >>>这些符号是用来向我们区分不同分支的冲突的。我们只需要留下我们真正需要的内容即可。

修改完后我们要再次add和commit一次,这个一定不能漏。

我们使用下面的命令也可以参看到这个结构:

 git log --graph --pretty=oneline --abbrev-commit

4.合并模式

在没有合并冲突的情况下,git会优先使用Fast forward模式。这个模式有一个问题,在我们删除合并完删除分支后,会丢失分支信息,我们无法知道最新的commit是不是合并出来的。

为了解决这个问题,我们要使用普通模式:

 
git merge --no-ff -m "" 分支名

三.远程操作

前面的操作其实都是在本地操作的,我们在实际开发时,不可能所有人都在一台设备上操作,每个人一台独立的设备,都在自己的设备上进行开发。这个时候就需要一个远程仓库,每个将写的代码提交到远程仓库中,远程仓库可以自己搭建,也可以是使用GitHub或Gitee等。

下面使用Gitee做示范。

1.克隆远程仓库

打开右上角克隆/下载,里面会有:

为什么可以选择使用上面的地址克隆。

这里只以HTTPS和SSH为例。

对于HTTPS,操作很简单,只需要将上面的地址复制:

git clone 地址

2.推送到远程仓库

将远程克隆到本地后,我们可以使用命令将本地仓库的代码推送到远程仓库中:

git push 远程主机名 本地分⽀名:远程分⽀名# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号
git push 远程主机名 本地分⽀名

比较常见的就是下面这个:

git push origin master

3.拉取远程仓库

如果别人修改了代码并提交到远程仓库,我们要与远程仓库的代码同步,这个时候就要使用拉取操作了:

git pull 远程主机名 本地分⽀名:远程分⽀名# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号
git pull 远程主机名 本地分⽀名

git pull 命令其实执行了两个操作,一个是从远程仓库拉取代码,一个是与本地分支合并。

4.配置git

1)忽略特殊文件

在我们初始化仓库的时候,我们添加了一个 .gitignore文件:

写入这个文件的文件在使用 git add . 时就不会一起提交了。

比如我们想忽略所有 .ini 结尾的文件,那么我们就可以写:

*.ini

如果我们在忽略的文件中 a.ini 我们是想让其提交的,这个时候我们可以写:

*.ini
!a.ini

2)命令配置别名

比如我们想给 git status 起一个别名:

git config [--global] alias.st status

此时我们使用 git st 与使用 git status 的效果是一样的。

我们配置完命令后,原来的命令还是可以用的,其与我们的配置是并存的。

四.标签管理

标签tag,可以简单的理解是某次commit的一个标识,相当于起了一个别名。

1.创建标签

先切换到要创建标签的分支,然后创建标签:

git tag 标签名

创建完后我们可以使用 git tag 来查看我们创建的标签,但是要注意标签不是按时间顺序列出,而是按字母排序的。

2.操作标签

删除本地标签:

git tag -d 标签名

删除远程仓库标签:

 git push origin :refs/tags/标签名

将本地标签推送到远程仓库:
 

git push origin 标签名
# 将全部标签推送
git push origin --tags

相关文章:

Git使用与管理

一.基本操作 1.创建本地仓库 在对应文件目录下进行&#xff1a; git init 输入完上面的代码&#xff0c;所在文件目录下就会多一个名为 .git 的隐藏文件&#xff0c;该文件是Git用来跟踪和管理仓库的。 我们可以使用 tree 命令&#xff08;注意要先下载tree插件&#xff09…...

计算机网络——传输层(Udp)

udp UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议 &#xff09;是一种无连接的传输层协议&#xff0c;它在IP协议&#xff08;互联网协议&#xff09;之上工作&#xff0c;为应用程序提供了一种发送和接收数据报的基本方式。以下是UDP原理的详细解释&…...

网络安全小知识课堂(五)

病毒与蠕虫&#xff1a;你的电脑为何会 “生病” 和 “传染”&#xff1f; 引言 你是否见过这样的场景&#xff1a;电脑突然弹窗广告暴增&#xff0c;文件莫名消失&#xff0c;甚至整个公司网络集体瘫痪&#xff1f;这些症状背后&#xff0c;可能是 ** 病毒&#xff08;Virus…...

图解Java设计模式

1、设计模式面试题 2、设计模式的重要性 3、7大设计原则介绍 3.1、单一职责原则...

wsl2+ubuntu22.04安装blender教程(详细教程)

本章教程介绍,如何在Windows操作系统上通过wsl2+ubuntu安装blender并运行教程。Blender 是一款免费、开源的 ​​3D 创作套件​​,广泛应用于建模、动画、渲染、视频编辑、特效制作等领域。它由全球开发者社区共同维护,支持跨平台(Windows、macOS、Linux),功能强大且完全…...

其他合成方式介绍

在 SurfaceFlinger 的 Layer 处理逻辑中&#xff0c;除了常见的 Client Composition&#xff08;GPU合成&#xff09; 和 Device Composition&#xff08;HWC合成&#xff09;&#xff0c;还存在一些特殊的合成方式&#xff0c;比如 Sideband、Solid Color 和 Display Decorati…...

Spring AI Alibaba MCP 市场正式上线!

Spring AI Alibaba 正式上线 MCP 市场&#xff1a;Spring AI Alibaba-阿里云Spring AI Alibaba官网官网。 开发者可以在这里搜索市面上可用的 MCP Server 服务&#xff0c;了解每个服务的实现与接入方法。 MCP 市场是做什么的&#xff1f; Spring AI Alibaba MCP 当前主要提供…...

Spring Security基本入门

1、为什么要使用权限框架 权限管理是所有后台系统的都会涉及的一个重要组成部分&#xff0c;主要目的是对不同的人访问资源进行权限的控制&#xff0c;避免因权限控制缺失或操作不当引发的风险问题&#xff0c;如操作错误&#xff0c;隐私数据泄露等问题。 2、权限管理的常见…...

【Hadoop入门】Hadoop生态圈概述:核心组件与应用场景概述

1 Hadoop生态圈概述 Hadoop生态圈是以 HDFS&#xff08;分布式存储&#xff09; 和 YARN&#xff08;资源调度&#xff09; 为核心&#xff0c;围绕大数据存储、计算、管理、分析等需求发展出的一系列开源工具集合。 核心特点&#xff1a; 模块化&#xff1a;各组件专注解决特定…...

深入理解 Spring 的 MethodParameter 类

MethodParameter 是 Spring 框架中一个非常重要的类&#xff0c;它封装了方法参数&#xff08;或返回类型&#xff09;的元数据信息。这个类在 Spring MVC、AOP、数据绑定等多个模块中都有广泛应用。 核心功能 MethodParameter 主要提供以下功能&#xff1a; 获取参数类型信息…...

人工智能:GPT技术应用与未来展望

GPT(Generative Pre-trained Transformer)作为自然语言处理领域的代表性技术,近年来在各行业的实际应用中展现出广泛潜力。结合其技术特性与行业需求,以下是GPT的主要应用场景、案例分析及未来挑战的总结: 一、核心应用领域与案例 文本生成与内容创作 自动化内容生产:GPT…...

解决编译内核报错:No rule to make target ‘debian/canonical-certs.pem‘

解决编译内核报错&#xff1a;No rule to make target ‘debian/canonical-certs.pem‘问题 更换内核后重新编译内核报错1如下&#xff1a; make[1]: *** No rule to make target debian/canonical-certs.pem, needed by certs/x509_certificate_list. Stop. make: *** [Mak…...

spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解

RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping&#xff08;隐式&#xff09;定义全局控制器增强类&#xff0c;处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…...

【Java设计模式】第1章 课程导学

第1章 课程导学 1-1 课堂导学 课程介绍 设计模式是工程师必备知识&#xff0c;面试高频考点。课程目标&#xff1a;提炼常用设计模式精华&#xff0c;结合场景演进和源码解析&#xff0c;系统学习设计模式。课程特色&#xff1a; 动态递进式讲解&#xff0c;通过场景变化展示…...

Java + WebAssembly 2025:如何用Rust优化高性能Web应用?

&#x1f4dd; 摘要 随着WebAssembly(WASM)技术的成熟&#xff0c;Java开发者现在可以通过结合Rust来构建更高性能的Web应用。本文将详细介绍如何在2025年的技术栈中使用Java和Rust通过WebAssembly实现性能优化&#xff0c;包括基础概念、实际应用场景、详细代码示例以及性能对…...

MCU控制4G模组(标准AT命令),CatM的最大速率?

根据3GPP标准&#xff0c;Cat M1的上行峰值速率大约是1 Mbps&#xff0c;下行大约是1 Mbps。但实际速率会受到多种因素影响&#xff0c;比如网络条件、信号强度、模块配置等。 考虑使用AT命令时的开销。每次发送数据都需要通过AT命令&#xff0c;比如ATQISEND&#xff0c;会引…...

致远OA —— 表单数据获取(前端)

文章目录 :apple: 业务需求描述 &#x1f34e; 业务需求描述 测试案例&#xff1a; https://pan.quark.cn/s/3f58972f0a27 官网地址&#xff1a; https://open.seeyoncloud.com/v5devCAP/94/355/359/399/405/406.html 需求描述&#xff1a; 点击获取数据接口&#xff0c;…...

游戏引擎学习第214天

总结并为当天的任务做好准备 昨天&#xff0c;我们将所有调试控制代码迁移到使用新的调试接口中&#xff0c;但我们没有机会实际启用这些代码。我们做了很多准备工作&#xff0c;比如规划、将其做成宏、并将其放入调试流中&#xff0c;但实际上我们还没有办法进行测试。 今天…...

码率自适应(ABR)相关论文阅读简报2

论文5简介 标题&#xff1a;PAR:IMPROVING VIDEO BITRATE ADAPTATION VIA PAYLOAD-A W ARE THROUGHPUT PREDICTION 作者&#xff1a;Jialiang Pei, Congkai An, Anfu Zhou, Liang Liu, Huadong Ma 单位: 中国北京邮电大学计算机学院 发表会议&#xff1a; Conference on Mu…...

环信鸿蒙版 UIKit 快速上手指南

环信鸿蒙版 UIKit 是专为 HarmonyOS 开发者设计的 IM UI 组件库&#xff0c;基于环信 IM SDK 开发&#xff0c;可帮助开发者快速集成即时通讯功能。 环信UIKit 的特点 ArkUI 声明式开发范式&#xff1a;采用高效简洁的声明式开发方式状态管理 V2&#xff1a;支持深度观测和精…...

核心机制与主流协议解析

一、收益聚合器的核心逻辑 收益聚合器&#xff08;Yield Aggregator&#xff09;通过算法自动优化用户在DeFi协议中的资金配置&#xff0c;解决「收益耕作&#xff08;Yield Farming&#xff09;」的两大痛点&#xff1a; 机会捕捉&#xff1a;实时追踪高收益矿池&#xff08…...

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解

1前言 项目需要使用MCU实现网络功能&#xff0c;后续确定方案stm32f407 外接lan8720a实现硬件平台搭建&#xff0c;针对lan8720a也是用的比较多的phy&#xff0c;网上比较多的开发板&#xff0c;硬件上都是选用了这个phy&#xff0c;项目周期比较短&#xff0c;选用了这个常用…...

Go:入门

文章目录 Hello, World命令行参数找出重复行GIF动画获取一个URL并发获取多个URL一个 Web 服务器其他 Hello, World Hello world package main import "fmt" func main() {fmt.Println("Hello, 世界") }package main表明这是一个可独立执行的程序包&#…...

createContext+useContext+useReducer组合管理React复杂状态

createContext、useContext 和 useReducer 的组合是 React 中管理全局状态的一种常见模式。这种模式非常适合在不引入第三方状态管理库&#xff08;如 Redux&#xff09;的情况下&#xff0c;管理复杂的全局状态。 以下是一个经典的例子&#xff0c;展示如何使用 createContex…...

JVM常见问题与调优

目录 一、内存管理问题 1、内存泄漏&#xff08;Memory Leak&#xff09; 2、内存溢出&#xff08;OOM, OutOfMemoryError&#xff09; 2.1 堆内存溢出&#xff08;OutOfMemoryError: Java heap space&#xff09; 2.2 元空间溢出&#xff08;OutOfMemoryError: Metaspace…...

汽车售后诊断 ODX 和 OTX 对比分析报告

一、引言 在汽车行业不断发展的当下&#xff0c;汽车售后诊断技术对于保障车辆性能、维护车主权益以及提升汽车品牌服务质量起着至关重要的作用。随着汽车电子化程度的不断提高&#xff0c;售后诊断所涉及的数据和流程愈发复杂&#xff0c;这就促使行业需要更加标准化、高效化…...

AI重构农业:从“面朝黄土“到“数字原野“的产业跃迁—读中共中央 国务院印发《加快建设农业强国规划(2024-2035年)》

在东北黑土地的万亩良田上&#xff0c;无人机编队正在执行精准施肥作业&#xff1b;在山东寿光的智慧大棚里&#xff0c;传感器网络实时调控着番茄生长的微环境&#xff1b;在云南的咖啡种植园中&#xff0c;区块链溯源系统记录着每粒咖啡豆的旅程。这场静默的农业革命&#xf…...

go游戏后端开发33:解散房间

接下来&#xff0c;我们来实现房间的解散功能。因为在调试过程中&#xff0c;如果不能取消房间&#xff0c;就需要频繁重启程序&#xff0c;这非常不方便。所以&#xff0c;我们先来实现这个解散功能。 房间解散的流程其实很简单。当发起解散请求后&#xff0c;我们会向所有用…...

Cloudflare教程:免费优化CDN加速配置,提升网站访问速度 | 域名访问缓存压缩视频图片媒体文件优化配置

1、启用 Tiered Cache 缓存开关&#xff1a;通过选择缓存拓扑&#xff0c;可以控制源服务器与 Cloudflare 数据中心的连接方式&#xff0c;以确保缓存命中率更高、源服务器连接数更少&#xff0c;并且 Internet 延迟更短。 2、增加浏览器缓存时间TTL&#xff1a;在此期间&#…...

Python设计模式:策略模式

1. 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装起来&#xff0c;并使它们可以互换。策略模式使得算法的变化独立于使用算法的客户。换句话说&#xff0c;策略模式允许在运…...