首页 > 其他分享 >什么是Git

什么是Git

时间:2024-11-29 11:34:23浏览次数:6  
标签:git 仓库 什么 对象 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的使用。

标签:git,仓库,什么,对象,Git,提交,分支
From: https://blog.csdn.net/Zongkunxue/article/details/144107893

相关文章

  • 什么是 meta-framework?
    Meta-framework,或称为元框架,是一种设计用来构建、扩展或者管理其他软件框架的框架。它提供了一种更高层次的抽象,使得开发者能够更加方便地创建特定领域的应用或服务。Meta-framework通常包含了一些通用的功能和工具集,这些功能和工具集可以被定制化以适应不同的应用场景。在实际开......
  • 一文带你了解什么是透明FPC?
    透明FPC(Transparent Flexible Printed Circuit)是指以透明柔性材料为基材制作的柔性印刷电路板。与传统FPC相比,透明FPC在保持柔性特性的同时,具有部分或全部透明的特点,广泛用于需要透光性或高美观度的电子设备中。一、透明FPC的主要构成1. 透明基材:通常使用透明的聚酰亚胺......
  • 在Python中什么是面向对象思维?
    目录1.引言2.面向对象编程(OOP)的基础概念2.1面向对象编程的定义2.2面向对象与面向过程的区别3.Python中的面向对象编程核心要素3.1类与对象3.2属性与方法3.3封装、继承与多态4.Python实现面向对象的基础操作4.1定义类与实例化对象 4.2类的属性与方法4.......
  • 什么是API接口?API接口的类型,如何调用API接口?
    当今互联网技术的发展越来越快,越来越多的网站和应用程序需要获取外部数据来提供更好的服务和用户体验,这就需要使用API接口。本文将会对API接口的概念、类型以及如何调用API接口进行简要介绍。一、什么是API接口?API(ApplicationProgrammingInterface)是应用程序开发接口的缩写,意......
  • git简单使用
    基础配置设置git自己的名字和电子邮件(注意gitconfig命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置)gitconfig--globaluser.email"2870365142@qq.com"gitconfig--globaluser.name"bznsy"看查配置gitconfig-l检查代理设置gitco......
  • 云顶书院Task1&Task2:Python基础,数据结构基础,HTML基础,Markdown基础,Git基础
    第一周学习一、前言有一个很好的学习路线,是我偶然间发现的,当你学完了C语言(翁恺老师的链表)之后,同时开启数据结构(陈越老师和何钦铭老师的)和Python(黑马加Datawhale)的学习后,你就会真切地沉迷于C语言的底层逻辑和Python的便利,因为在C语言中一大串的线性表,在Python中只是一个数据类型(d......
  • 为什么知识付费虚拟产品总被大多人认为是割韭菜呢?
    随着知识付费产业的发展,越来越多的听到一种声音,就是很多人会说,知识付费都是割韭菜。这句话虽然有些偏颇,但是仔细想想,也不无道理。知识付费总会被认为是割韭菜,其实是有他的内在必然性的。世间万物,从一种宏观的角度来讲,其实都是割韭菜,或者换一个辩证的观点,世间万物都不是割韭......
  • 说说React服务端渲染怎么做?原理是什么?
    一、是什么在SSR中 (opensnewwindow),我们了解到Server-SideRendering ,简称SSR,意为服务端渲染指由服务侧完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页面的过程其解决的问题主要有两个:SEO,由于搜索引擎爬虫抓取工具......
  • 面试官:为什么数据库连接池不采用 IO 多路复用?
    今天我们聊一个不常见的Java面试题:为什么数据库连接池不采用IO多路复用?这是一个非常好的问题。IO多路复用被视为是非常好的性能助力器。但是一般我们在使用DB时,还是经常性采用c3p0,tomcatconnectionpool等技术来与DB连接,哪怕整个程序已经变成以Netty为核心。这到底......
  • 让 AI 村民组成虚拟村庄会发生什么事?——GENERATIVE AI——拓展内容(第5讲)
    目录0完整章节内容1资源链接2 由ChatGPT控制的NPC2.1研究方法 2.2研究目标2.3实验结果3脱稿玩家(FreeGuy)3.1背景设定3.2角色觉醒与情感3.3社会关系发展4AI自己规划一天4.1要产生什么样的行为说明是由ChatGPT来操控4.2怎么操控ChatGPT来做出非常复杂......