什么是Git

Git

  • Git是什么?
    • Git核心功能
    • Git的常用命令
    • Git原理
      • 对象存储
        • Blob对象
        • Tree对象
      • 分支管理
      • 版本合并
      • Git的工作流程
      • Git的底层操作

Git是什么?

Git是一种分布式版本控制系统,它可以帮助团队协作开发,跟踪代码变更历史,管理和维护源代码。以下是对Git及其一些常用命令的详细介绍:

Git核心功能

Git的核心功能

  1. 版本库(Repository):Git用来存储代码的仓库,通常也称为Repo。它包含了所有文件的历史版本和元数据信息。
  2. 提交(Commit):Git允许用户提交代码到本地或远程版本库。提交是将更改存储在版本库中的过程。
  3. 分支(Branch):Git支持多个分支,开发者可以在不影响主线代码的情况下开发和测试新功能。
  4. 合并(Merge):Git可以将两个或多个分支的代码合并到一个分支中。合并后的代码在版本库中产生一次新的提交。
  5. 标签(Tag):Git支持为某一次提交打上标签,方便以后找到该版本。
  6. 远程库(Remote):Git支持在本地和远程库之间同步代码。远程库是在网络上的另一个代码仓库,例如GitHub、Gitcode、Codehub等。

Git的常用命令

  • git init:在当前目录初始化一个新的Git仓库。
  • git clone [url]:克隆远程仓库到本地。例如:git clone https://github.com/user/repo.git。
  • git add:将文件添加到Git的暂存区,准备提交。例如,git add . 将当前目录的所有文件添加到暂存区。
  • git commit -m “message”:提交暂存区中的文件到Git仓库,并添加提交信息。例如:git commit -m “Initial commit”。
  • git status:查看Git仓库的状态,显示新增、修改和删除的文件。
  • git diff:比较文件在Git仓库和本地工作区的差异。
  • git log:查看提交历史记录。
  • git branch:创建、切换和删除分支。例如,git branch new_branch 创建一个新分支,git checkout new_branch 切换到新分支,git branch -d branch_name 删除指定分支。
  • git checkout:切换到指定的分支或恢复工作区文件。例如,git checkout new_branch 切换到新分支,git checkout . 恢复工作区文件。
  • git merge:将指定分支的修改合并到当前分支。例如,git merge new_branch 将new_branch分支的修改合并到当前分支。
  • git remote:管理远程仓库地址。例如,git remote add origin https://github.com/user/repo.git 添加远程仓库地址。
  • git pull:从远程仓库拉取最新的代码并合并到当前分支。
  • git push:将本地提交推送到远程仓库。例如,git push origin master 将当前分支的修改推送到远程仓库的master分支。
  • git stash:保存当前工作区的修改,恢复到最近一次提交的状态。例如,在需要切换到其他任务时,可以使用该命令保存当前修改,完成任务后再通过git stash pop恢复修改。
  • git revert:撤销指定提交。通过git revert commit_id可以撤销指定提交并生成新的提交。
  • git reset:重置HEAD指针。通过git reset --hard commit_id可以将HEAD指针重置为指定提交,但会丢失重置点之后的提交历史。
  • git cherry-pick:选择性地应用提交。通过git cherry-pick commit_id可以将指定提交应用到当前分支。

Git原理

对象存储

Git使用一种称为“对象”的数据结构来存储版本控制信息。这些对象可以是文件、目录、提交信息等,每个对象都有一个唯一的哈希值来标识它。Git使用SHA-1算法对对象进行哈希,以确保对象的完整性。这些对象都存储在.git/objects目录(也叫做对象库)中。Git中的对象类型主要包括以下几种:

Blob对象

Blob(Binary Large Object,二进制大对象)是Git中的一种对象类型,用来指代某些可以包含任意数据的变量或文件。它是Git对文件内容的一种抽象表示。每个文件在Git仓库中都被表示为一个独立的Blob对象,Blob对象保存了文件的原始二进制数据。无论文件是文本文件还是二进制文件,Git都以Blob对象的形式存储它们。当在Git仓库中添加、修改或删除某个文件时,Git会创建一个新的Blob对象来存储这个文件的内容,从而可以跟踪文件的变化历史,并且可以在需要时恢复到特定的文件版本。

Tree对象

Tree对象是Git中的一种对象类型,用于表示文件和目录的组织结构。每当向Git仓库中添加一个目录时,Git会创建一个新的Tree对象来表示该目录的结构。Tree对象包含了目录中的文件和子目录的元数据,以及它们对应的Blob或Tree对象的哈希值。
Commit对象:Commit对象记录本次提交的所有信息,包括提交人、提交时间、本次提交包含的Tree及Blob等。

分支管理

Git将版本控制的历史记录表示为一棵有向无环图(DAG),其中每个节点表示一个提交(commit)。Git使用分支来管理这些提交,每个分支都指向一棵DAG的某个节点。Git使用指针(指向某个提交的引用)来管理分支。分支在Git中是非常轻量级的,仅仅是一个指向某个提交的指针(或者说是引用)。创建、合并和删除分支在Git中都是非常快速和简单的操作。

版本合并

Git可以自动将多个分支合并成一个新的分支。Git使用三方合并(three-way merge)算法来确定合并后的版本,这个算法将两个分支和它们的共同祖先合并在一起。如果合并冲突,Git会让用户手动解决冲突。三方合并算法是Git版本合并的核心,它能够处理复杂的合并情况,并尽可能地保留用户的更改。

Git的工作流程

  • 工作区(Working Directory):这是用户平时编写和修改代码的地方。
  • 暂存区(Stage/Index):暂存区是提交文本文件到本地仓库的来源地。用户需要将工作区的文件添加至暂存区,然后才可以提交至本地仓库。
  • 本地仓库(Repository):本地仓库保存了每次文件更新的记录,包括提交人、提交时间、提交的内容等详细信息,方便追溯历史版本。
  • 远程仓库(Remote Repository):远程仓库是本地仓库的一个副本,主要是方便合作伙伴之间的仓库文件同步。

Git的底层操作

在底层实现上,Git将所有对象存储在一个名为“.git”的目录下,包括版本历史记录、分支和标签信息、索引、对象库等。Git使用命令行工具和一些图形界面工具来提供用户接口,用户可以使用这些工具来对Git仓库进行操作。例如,使用git cat-file -t 命令可以查看对象的类型,使用git cat-file -p 命令可以查看对象的内容。

总的来说,Git是一个功能强大的版本控制系统,通过熟练掌握这些常用命令,开发者可以更加高效地进行代码管理和团队协作。我们作为一个合格的开发者都应该掌握基本的git的使用。

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

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

相关文章

.net XSSFWorkbook 读取/写入 指定单元格的内容

方法如下&#xff1a; using NPOI.SS.Formula.Functions;using NPOI.SS.UserModel;using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;/// <summary>/// 读取Excel指定单元格内容/// </summa…

704. 二分查找 C++

文章目录 一、题目链接二、参考代码三、所思所悟 一、题目链接 链接: 704. 二分查找 二、参考代码 int search(const vector<int>& nums, int target) {int left 0; int right nums.size() - 1;//左闭右闭[]while (left < right){int mid (left right) / 2;…

Matlab搜索路径添加不上

发现无论是右键文件夹添加到路径&#xff0c;还是在“设置路径”中专门添加&#xff0c;我的路径始终添加不上&#xff0c;导致代码运行始终报错&#xff0c;后来将路径中的“”加号去掉后&#xff0c;就添加成功了&#xff0c;经过测试&#xff0c;路径中含有中文也可以添加成…

知乎启用AutoMQ替换Kafka,开辟成本优化与运维提效新纪元

作者&#xff1a;知乎在线架构组 王金龙 关于知乎 知乎公司&#xff0c;成立于 2010 年 8 月 10 日&#xff0c;于 2011 年 1 月 26 日正式上线&#xff0c;是中文互联网的高质量问答社区和创作者聚集的原创内容平台。 知乎起步于问答&#xff0c;而超越了问答。知乎以「生…

Canal mysql数据库同步到es

Canal与Elasticsearch集成指南 [可视化工具](https://knife.blog.csdn.net/article/details/126348055)下载Canal 1.1.5版本 (alpha-2) 请从GitHub Releases下载Canal 1.1.5版本中间版本alpha-2。仅需下载canal.deployer和canal.adapter组件。 安装Elasticsearch 确保已安装…

LeetCode41:缺失的第一个正数

原题地址&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入…

Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...

全文链接&#xff1a;https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果&#xff0c;特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素&#xff1a;跳跃因子的自适应算法以及逆 Fisher 矩阵的计算&#xff0c;该逆 Fisher 矩阵可用作提议密…

相机学习笔记——工业相机的基本参数

0、相机分类 图像颜色不同可以分为黑白相机和彩色相机&#xff1a;相同分辨率下&#xff0c;黑白工业相机相比彩色工业相机精度更高&#xff0c;检测图像边缘时&#xff0c;黑白工业相机成像效果更好。 芯片类型不同可以分为CCD相机和CMOS相机&#xff1a;CCD工业相机具有体积小…

SpringBoot Web 开发请求参数

SpringBoot Web 开发请求参数 简单的 web 请求: @RestController public class HelloController {@RequestMapping("sayHello")public String sayHello(){System.out.println("Hello World");return "hello world";} }获取请求参数 简单参数…

服务器如何隐藏端口才能不被扫描?

在服务器上隐藏端口以避免被扫描&#xff0c;是一种增强安全性的措施。虽然完全隐藏端口不太可能&#xff08;因为网络通信本质上需要暴露端口&#xff09;&#xff0c;但可以通过一系列技术手段尽量降低端口被扫描或探测的可能性。以下是详细的实现方法&#xff1a; 1. 更改默…

Oracle—系统包使用

文章目录 系统包dbms_redefinition 系统包 dbms_redefinition 功能介绍&#xff1a;该包体可以实现将Oracle库下的表在线改为分区结构或者重新定义&#xff1b; 说明&#xff1a;在检查表是否可以重定义和开始重定义的过程中&#xff0c;按照表是否存在主键&#xff0c;参数 o…

专业清洁艺术,还原生活本色——友嘉高效除菌洗碗机

生活中&#xff0c;每个人都渴望拥有一份洁净的生活环境。而家&#xff0c;作为我们最温馨的港湾&#xff0c;对洁净的追求更是无时无刻不在进行。每当饭后的欢声笑语过后&#xff0c;面对一堆沾满油渍、藏匿着细菌的餐具&#xff0c;我们不禁感到一丝烦忧。然而&#xff0c;有…

Neo4j 图数据库安装与操作指南(以mac为例)

目录 一、安装前提条件 1.1 Java环境 1.2 Homebrew&#xff08;可选&#xff09; 二、下载并安装Neo4j 2.1 从官方网站下载 2.1.1 访问Neo4j的官方网站 2.1.2 使用Homebrew安装 三、配置Neo4j 3.1 设置环境变量(可选) 3.2 打开配置文件(bash_profile) 3.2.1 打开终端…

无人机主控芯片技术与算法详解!

一、无人机主控芯片核心技术 高性能CPU&#xff1a; 无人机需要高性能的CPU来处理复杂的飞行控制算法、图像处理和数据传输等任务。目前&#xff0c;无人机的CPU主要有大疆自研的飞控系统、高通提供的无人机设计平台Snapdragon Flight&#xff0c;以及基于开源平台APM、Px4等…

基于python的汽车数据爬取数据分析与可视化

一、研究背景 基于提供的代码片段和讨论&#xff0c;我们可以得出一个与网络抓取、数据处理和数据可视化相关的研究背景&#xff0c;该背景涉及到汽车行业。以下是研究背景的陈述&#xff1a; "在迅速发展的汽车行业中&#xff0c;准确和及时的数据对各方利益相关者至关…

JAVA:Springboot 集成 WebSocket 和 STOMP 实时消息的技术指南

1、简述 随着互联网应用的复杂性和实时性需求的增加&#xff0c;传统的 HTTP 请求响应模式已不能满足某些场景的需求。WebSocket 和 STOMP 协议为构建实时消息传输提供了极大的便利。本文将介绍如何在 Spring Boot 中使用 WebSocket 和 STOMP 创建一个实时消息应用&#xff0c…

vue3+ant design vue实现日期选择器默认显示当前年,并限制用户只能选择当前年及之前~

1、思路&#xff1a;之前想拿当前年直接做赋值操作&#xff0c;实际上是行不通的&#xff0c;因为组件本身有数据格式限制&#xff0c;会出现报错&#xff0c;然后索性直接获取当前日期&#xff08;YYYY-MM-DD&#xff09;赋值给日期组件&#xff0c;这样不管你用的是年&#x…

Vue.js 中的事件处理

在 Vue.js 中&#xff0c;事件处理是用户与应用交互的重要方式。Vue.js 允许开发者以一种声明式的方式来绑定事件监听器&#xff0c;这使得代码更加简洁和易于维护。本文将介绍 Vue.js 中的事件处理&#xff0c;包括常用的事件类型和如何使用它们。 Vue.js 事件基础 在 Vue.j…

Kafka2.2.0集群安装

Kafka2.2.0 三节点集群搭建 Kafka2.2.0 基于zookeeper搭建&#xff0c;这里也搭建一个三个节点的集群。(在一个节点模拟三节点&#xff0c;真实的三节点把ip替换一下即可&#xff0c;按照hadoop案件把网络打通即可) 1、下载解压 Kafka 安装包官方下载地址 &#xff0c;本用例…

Vue文字转语音实现

在开发流程中&#xff0c;面对语音支持的需求&#xff0c;小规模语音内容或许可以通过预处理后播放来轻松应对&#xff0c;但当涉及大量语音时&#xff0c;这一方法就显得繁琐低效了。为此&#xff0c;智慧的开发者们总能找到便捷的解决方案——利用Web技术实现语音播放&#x…