Git 详解
Git 详解
Git 是一个分布式版本控制系统,用于高效地管理项目代码的版本历史。它是目前最流行的版本控制工具之一,广泛应用于软件开发领域。Git 的分布式架构允许开发者在本地进行代码的版本管理,并与远程仓库同步,实现团队协作。
1. Git 的核心概念
1.1 版本控制系统
- 集中式版本控制(如 SVN):所有版本信息存储在中央服务器,开发者需联网访问。
- 分布式版本控制(Git):每个开发者拥有完整的版本库,可以离线工作。
1.2 Git 的主要特点
- 分布式架构:每个开发者都有完整的版本库,无需依赖中央服务器。
- 速度快:Git 的分支、合并等操作非常高效。
- 小体积:Git 通过压缩存储文件差异,占用空间小。
- 非线性开发:支持多个开发分支并行工作。
- 安全性:历史记录不可篡改,确保版本完整性。
- 灵活性:适用于小型个人项目到大型企业项目。
2. Git 的基本操作对象
2.1 工作区(Working Directory)
- 本地实际存储代码的目录。
- 这是开发者直接操作的区域。
2.2 暂存区(Staging Area/Index)
- 一个临时区域,用于存储将要提交到版本库的文件。
- 通过
git add命令将修改放入暂存区。
2.3 本地仓库(Local Repository)
- 通过
git commit将暂存区的文件提交到本地仓库。
2.4 远程仓库(Remote Repository)
- 集中存储代码的服务器(如 GitHub、GitLab、Bitbucket 等)。
- 本地仓库可以与远程仓库同步。
3. Git 的常用命令
3.1 初始化与配置
- 初始化 Git 仓库:
git init - 配置用户名和邮箱:
git config --global user.name "Your Name" git config --global user.email "your_email@example.com" - 查看当前配置:
git config --list
3.2 文件操作
- 查看文件状态:
git status - 添加文件到暂存区:
git add <file> git add . # 添加所有修改 - 提交文件到本地仓库:
git commit -m "Commit message" - 删除文件:
git rm <file>
3.3 分支操作
- 查看分支:
git branch - 创建新分支:
git branch <branch_name> - 切换分支:
或:git checkout <branch_name>git switch <branch_name> - 创建并切换到新分支:
git checkout -b <branch_name> - 合并分支:
git merge <branch_name> - 删除分支:
git branch -d <branch_name>
3.4 远程操作
- 添加远程仓库:
git remote add origin <remote_repository_url> - 查看远程仓库:
git remote -v - 推送到远程仓库:
git push origin <branch_name> - 拉取远程代码:
git pull origin <branch_name> - 克隆远程仓库:
git clone <repository_url>
3.5 查看历史记录
- 查看提交历史:
git log - 简化日志查看:
git log --oneline --graph --all
3.6 回滚与恢复
- 恢复暂存区文件:
git restore --staged <file> - 恢复工作区文件:
git restore <file> - 回退到某次提交:
git reset --hard <commit_hash>
4. Git 的分支管理
4.1 为什么需要分支
- 在团队开发中,不同功能和 Bug 修复可以在独立分支中进行开发,互不干扰。
- 常用分支模型:
- 主分支(main/master):稳定版本。
- 开发分支(develop):集成开发版本。
- 功能分支(feature/xxx):开发新功能。
- 修复分支(bugfix/xxx 或 hotfix/xxx):修复问题。
4.2 分支合并的两种方式
- Fast-forward 合并:直接移动分支指针,适用于分支间没有其他提交。
- 三方合并:创建一个新的合并提交,适用于分支有分歧。
4.3 分支冲突
- 当两个分支修改了同一文件的同一部分时,合并可能产生冲突。
- 解决步骤:
- Git 提示冲突后,手动编辑冲突文件。
- 标记解决冲突后,添加文件到暂存区:
git add <file> - 提交合并:
git commit
5. Git 工作流程
5.1 单人开发工作流
- 初始化项目:
git init - 编写代码并添加到暂存区:
git add . - 提交到本地仓库:
git commit -m "message" - 推送到远程仓库:
git push origin main
5.2 多人协作工作流
- 克隆远程仓库:
git clone <url> - 创建分支开发功能:
git checkout -b feature/xxx - 提交代码到远程分支:
git push origin feature/xxx - 提交合并请求(Pull Request/PR)。
- 解决合并冲突(如果有)。
- 合并分支到主分支。
6. Git 的高级功能
6.1 标签(Tags)
- 创建标签:
git tag <tag_name> - 查看标签:
git tag - 推送标签到远程:
git push origin <tag_name>
6.2 子模块(Submodule)
- 添加子模块:
git submodule add <repository_url> - 初始化子模块:
git submodule update --init
6.3 Git 的钩子(Hooks)
- Git 提供钩子机制,在某些操作触发时自动执行脚本。
- 常见钩子:
pre-commit:在提交代码前运行。post-merge:在合并分支后运行。
7. Git 常见问题
7.1 推送失败:拒绝非 Fast-forward 合并
- 原因:远程仓库有新提交,本地版本落后。
- 解决方法:
git pull origin <branch_name> --rebase git push origin <branch_name>
7.2 撤销已提交的代码
- 撤销最近一次提交(保留改动):
git reset --soft HEAD~1 - 撤销最近一次提交(删除改动):
git reset --hard HEAD~1
7.3 删除远程分支
- 删除远程分支:
git push origin --delete <branch_name>
8. 总结
Git 是现代软件开发中不可或缺的工具,其强大的分布式架构、分支管理能力和丰富的功能支持了复杂的软件开发流程。无论是个人项目还是团队协作,熟练使用 Git 都能极大提升开发效率和代码质量。
相关文章:
Git 详解
Git 详解 Git 是一个分布式版本控制系统,用于高效地管理项目代码的版本历史。它是目前最流行的版本控制工具之一,广泛应用于软件开发领域。Git 的分布式架构允许开发者在本地进行代码的版本管理,并与远程仓库同步,实现团队协作。…...
Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)
上篇文章:Linux操作系统2-进程控制3(进程替换,exec相关函数和系统调用)_execv系统调用-CSDN博客 本篇代码Gitee仓库:myLerningCode 橘子真甜/linux学习 - 码云 - 开源中国 (gitee.com) 本篇重点:C语言基础IO与系统调用 目录 一.…...
【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接
目录 一. BeautifulSoup的作用二. 核心方法介绍2.1 构造函数2.2 find()方法2.3 find_all()方法2.4 select()方法 三. 网络爬虫中使用BeautifulSoup四、案例爬取结果 一. BeautifulSoup的作用 解析HTML/XML文档:它可以将复杂的HTML或XML文本转换为易于操作的树形结构…...
Rancher V2.7.0安装教程
1、执行Docker命令 docker run -d --privileged --restartunless-stopped -p 80:80 -p 443:443 -v /home/rancher:/var/lib/rancher --name rancher registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.7.0 注:如果容器启动失败,参考我另外一篇文章…...
STM32MX 配置CANFD收发通讯
一、环境 MCU:STM32G0B1CEU6 CAN收发器:JIA1042 二、MX配置 配置SYS 配置canfd并开启中断,我开了两个FDCAN,配置是一样的,这里贴一下波特率的计算公式: 也就是:CAN时钟频率/预分频器/&…...
(12)时间序列预测之MICN(CNN)
文章目录 前言1. challenge 一、网络结构1. MHDecomp2. Trend-cyclical Prediction Block3. Seasonal Prediction BlockMIC LayerMerge 实验结果1.长时预测 总结参考 文章信息 模型: MICN (Multi-scale Isometric Convolution Network)关键词: 长时预测…...
嵌入式蓝桥杯学习3 外部中断实现按键
Cubemx配置 前面的配置依旧一样。 原文链接:https://blog.csdn.net/m0_74246768/article/details/144227188 1.打开cubemx,将PB0到PB1配置为GPIO_EXTI模式。 2.在System-Core中点击GPIO,选择PB0到PB2, GPIO_Mode(触…...
自由学习记录(29)
FileStream FileStream 是 .NET 中用于文件操作的重要类,位于 System.IO 命名空间中。它提供了对文件的同步和异步读写操作。以下是它的方法签名和重载的详细介绍: 构造函数签名和重载 FileStream 提供多个构造函数,允许在创建实例时指定文…...
使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具
使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割:批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤:示例: 3. **代码实现**1. **加载标签…...
架构10-可观测性
零、文章目录 架构10-可观测性 1、可观测性 (1)可观测性的背景 **历史沿革:**可观测性最初由匈牙利数学家鲁道夫卡尔曼提出,用于线性动态控制系统。后来,该概念被引入到计算机科学中。**现代意义:**在分…...
git管理Unity项目的正确方式
git管理Unity项目的正确打开方式 前言:对于刚开始git进行unity项目管理的时候,我采取的方式是全部文件上传,文件数量太多以及上传太大,我尝试过一下几个方法: 利用git的LFS大文件进行传方式,可行但比较麻…...
openssl使用哈希算法生成随机密钥
文章目录 一、openssl中随机数函数**OpenSSL 随机数函数概览**1. **核心随机数函数** **常用函数详解**1. RAND_bytes2. RAND_priv_bytes3. RAND_seed 和 RAND_add4. RAND_status **随机数生成器的熵池****常见用例****注意事项** 二、使用哈希算法生成随机的密钥 一、openssl中…...
将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式
文章目录 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式MathType安装问题MathType30天试用延期MathPage.wll文件找不到问题 将word里自带公式编辑器编辑的公式转换成用mathtype编辑的格式 word自带公式编辑器编辑的公式格式: MathType编辑的格式&a…...
校园失物招领系统基于 SpringBoot:点亮校园归还遗失物之光
2系统开发环境 2.1vue技术 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第…...
dhcpd服务器的配置与管理(超详细!!!)
前提条件: (1)虚拟机能够联网(如果nat模式不能联网的看另一期) CentOS7 NAT模式不能联网-CSDN博客 (2)系统是Centos8,因为下载的dhcp-server软件包版本和Centos7不匹配,如果你能成…...
Qml之基本控件
一.Qml常用控件 1.Text(显示普通文本和富文本) 1.1显示普通文本: Window { visible: true width: 320 height: 240 title: qsTr("Hello World") Text { text: "Hello World!" font.family: "Helvetica" font.pointSize: 24 color:…...
【Java从入门到放弃 之 Stream API】
Java Stream API Stream API行为参数化传递代码Lambda表达式Lambda 表达式的语法方法引用 Lambda 表达式的实际应用集合操作并发编程 Lambda 表达式的注意事项总结 Stream API Java8提供了一个全新的API - Stream。引入这个Stream的主要目的,一个是可以支持更好的并…...
Ruby On Rails 笔记1——Rails 入门
突然想跟着官方文档把Ruby On Rails过一遍,把一些有用的记下来就可以一直看了,do它! https://guides.rubyonrails.org/v7.2/ 注:官网是英文文档,我自己翻译了一下,不确保完全准确,只供自己学习开发使用。 …...
高效开发 Python Web 应用:FastAPI 数据验证与响应体设计
高效开发 Python Web 应用:FastAPI 数据验证与响应体设计 目录 🧑💻 FastAPI 的数据验证系统与 Pydantic 模型📦 响应体与模型:定义响应数据的最佳实践🔄 响应模型与查询参数的结合:增强灵活…...
基于“开源 2+1 链动 O2O 商城小程序”的门店拉新策略与流程设计
摘要:在数字化商业浪潮席卷之下,实体门店面临着激烈的市场竞争,如何高效拉新成为关乎门店生存与发展的关键问题。本文聚焦于“开源 21 链动 O2O 商城小程序”,深入探讨结合多种手段的门店拉新策略及详细流程设计。通过剖析到店扫码…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
