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

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 分支冲突
  • 当两个分支修改了同一文件的同一部分时,合并可能产生冲突。
  • 解决步骤:
    1. Git 提示冲突后,手动编辑冲突文件。
    2. 标记解决冲突后,添加文件到暂存区:
      git add <file>
      
    3. 提交合并:
      git commit
      

5. Git 工作流程

5.1 单人开发工作流
  1. 初始化项目:git init
  2. 编写代码并添加到暂存区:git add .
  3. 提交到本地仓库:git commit -m "message"
  4. 推送到远程仓库:git push origin main
5.2 多人协作工作流
  1. 克隆远程仓库:git clone <url>
  2. 创建分支开发功能:git checkout -b feature/xxx
  3. 提交代码到远程分支:git push origin feature/xxx
  4. 提交合并请求(Pull Request/PR)。
  5. 解决合并冲突(如果有)。
  6. 合并分支到主分支。

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 是一个分布式版本控制系统&#xff0c;用于高效地管理项目代码的版本历史。它是目前最流行的版本控制工具之一&#xff0c;广泛应用于软件开发领域。Git 的分布式架构允许开发者在本地进行代码的版本管理&#xff0c;并与远程仓库同步&#xff0c;实现团队协作。…...

Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)

上篇文章&#xff1a;Linux操作系统2-进程控制3(进程替换&#xff0c;exec相关函数和系统调用)_execv系统调用-CSDN博客 本篇代码Gitee仓库&#xff1a;myLerningCode 橘子真甜/linux学习 - 码云 - 开源中国 (gitee.com) 本篇重点&#xff1a;C语言基础IO与系统调用 目录 一.…...

【Python网络爬虫笔记】8- (BeautifulSoup)抓取电影天堂2024年最新电影,并保存所有电影名称和链接

目录 一. BeautifulSoup的作用二. 核心方法介绍2.1 构造函数2.2 find()方法2.3 find_all()方法2.4 select()方法 三. 网络爬虫中使用BeautifulSoup四、案例爬取结果 一. BeautifulSoup的作用 解析HTML/XML文档&#xff1a;它可以将复杂的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 注&#xff1a;如果容器启动失败&#xff0c;参考我另外一篇文章…...

STM32MX 配置CANFD收发通讯

一、环境 MCU&#xff1a;STM32G0B1CEU6 CAN收发器&#xff1a;JIA1042 二、MX配置 配置SYS 配置canfd并开启中断&#xff0c;我开了两个FDCAN&#xff0c;配置是一样的&#xff0c;这里贴一下波特率的计算公式&#xff1a; 也就是&#xff1a;CAN时钟频率/预分频器/&…...

(12)时间序列预测之MICN(CNN)

文章目录 前言1. challenge 一、网络结构1. MHDecomp2. Trend-cyclical Prediction Block3. Seasonal Prediction BlockMIC LayerMerge 实验结果1.长时预测 总结参考 文章信息 模型&#xff1a; MICN (Multi-scale Isometric Convolution Network)关键词&#xff1a; 长时预测…...

嵌入式蓝桥杯学习3 外部中断实现按键

Cubemx配置 前面的配置依旧一样。 原文链接&#xff1a;https://blog.csdn.net/m0_74246768/article/details/144227188 1.打开cubemx&#xff0c;将PB0到PB1配置为GPIO_EXTI模式。 2.在System-Core中点击GPIO&#xff0c;选择PB0到PB2&#xff0c; GPIO_Mode&#xff08;触…...

自由学习记录(29)

FileStream FileStream 是 .NET 中用于文件操作的重要类&#xff0c;位于 System.IO 命名空间中。它提供了对文件的同步和异步读写操作。以下是它的方法签名和重载的详细介绍&#xff1a; 构造函数签名和重载 FileStream 提供多个构造函数&#xff0c;允许在创建实例时指定文…...

使用YOLO系列txt目标检测标签的滑窗切割:批量处理图像和标签的实用工具

使用YOLO系列txt目标检测标签的滑窗切割&#xff1a;批量处理图像和标签的实用工具 使用YOLO的TXT目标检测标签的滑窗切割&#xff1a;批量处理图像和标签的实用工具背景1. 代码概述2. 滑窗切割算法原理滑窗切割步骤&#xff1a;示例&#xff1a; 3. **代码实现**1. **加载标签…...

架构10-可观测性

零、文章目录 架构10-可观测性 1、可观测性 &#xff08;1&#xff09;可观测性的背景 **历史沿革&#xff1a;**可观测性最初由匈牙利数学家鲁道夫卡尔曼提出&#xff0c;用于线性动态控制系统。后来&#xff0c;该概念被引入到计算机科学中。**现代意义&#xff1a;**在分…...

git管理Unity项目的正确方式

git管理Unity项目的正确打开方式 前言&#xff1a;对于刚开始git进行unity项目管理的时候&#xff0c;我采取的方式是全部文件上传&#xff0c;文件数量太多以及上传太大&#xff0c;我尝试过一下几个方法&#xff1a; 利用git的LFS大文件进行传方式&#xff0c;可行但比较麻…...

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自带公式编辑器编辑的公式格式&#xff1a; MathType编辑的格式&a…...

校园失物招领系统基于 SpringBoot:点亮校园归还遗失物之光

2系统开发环境 2.1vue技术 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第…...

dhcpd服务器的配置与管理(超详细!!!)

前提条件&#xff1a; &#xff08;1&#xff09;虚拟机能够联网&#xff08;如果nat模式不能联网的看另一期&#xff09; CentOS7 NAT模式不能联网-CSDN博客 &#xff08;2&#xff09;系统是Centos8&#xff0c;因为下载的dhcp-server软件包版本和Centos7不匹配,如果你能成…...

Qml之基本控件

一.Qml常用控件 1.Text(显示普通文本和富文本) 1.1显示普通文本&#xff1a; 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的主要目的&#xff0c;一个是可以支持更好的并…...

Ruby On Rails 笔记1——Rails 入门

突然想跟着官方文档把Ruby On Rails过一遍&#xff0c;把一些有用的记下来就可以一直看了&#xff0c;do它! https://guides.rubyonrails.org/v7.2/ 注&#xff1a;官网是英文文档&#xff0c;我自己翻译了一下&#xff0c;不确保完全准确&#xff0c;只供自己学习开发使用。 …...

高效开发 Python Web 应用:FastAPI 数据验证与响应体设计

高效开发 Python Web 应用&#xff1a;FastAPI 数据验证与响应体设计 目录 &#x1f9d1;‍&#x1f4bb; FastAPI 的数据验证系统与 Pydantic 模型&#x1f4e6; 响应体与模型&#xff1a;定义响应数据的最佳实践&#x1f504; 响应模型与查询参数的结合&#xff1a;增强灵活…...

基于“开源 2+1 链动 O2O 商城小程序”的门店拉新策略与流程设计

摘要&#xff1a;在数字化商业浪潮席卷之下&#xff0c;实体门店面临着激烈的市场竞争&#xff0c;如何高效拉新成为关乎门店生存与发展的关键问题。本文聚焦于“开源 21 链动 O2O 商城小程序”&#xff0c;深入探讨结合多种手段的门店拉新策略及详细流程设计。通过剖析到店扫码…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

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

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

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...