git --- 基础介绍

git --- 基础介绍

  • git 是什么
  • git --- 工作区, 暂存区, 资源库
  • git --- 文件状态
  • git --- branch 和 HEAD
  • git --- 一次正常的git提交流程

git 是什么

  • Git是一款分布式源代码管理工具(版本控制工具)
  • Git和其他传统版本控制系统比较:
  • 传统的版本控制系统(例如 SVN)是基于差异的版本控制,它们存储的是一组基本文件和每个文件随时间逐步累积的差异,
  • 优点: 节省磁盘空间,
  • 缺点:耗时、效率低。在每次切换版本的时候,都需要在基本文件的基础上,应用每个差异,从而生成目标版本对应的文件
  • Git 快照是在原有文件版本的基础上重新生成一份新的文件,类似于备份。为了效率,如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
  • 缺点:占用磁盘空间较大,
  • 优点:版本切换时非常快,因为每个版本都是完整的文件快照,切换版本时直接恢复目标版本的快照即可。
  • 特点:空间换时间
  • 在Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。基于这一特点,Git在断网后依旧可以在本地对项目进行版本管理,只需联网后,把本地修改的记录同步到云端服务器即可
  • 被git管理的项目会有这个.git文件夹
    在这里插入图片描述
  • 里面包括了所有分支, 节点 等信息
    在这里插入图片描述

git — 工作区, 暂存区, 资源库

工作区( Working Directory)

  • 在git管理下的正常目录都算是工作区, 平时对代码的改动都在这里进行

暂存区(Index)

  • 暂存区,用于临时存放你的改动. git add 或者 git stage 命令会把对代码的改动暂存在这里
  • commit之前必须要将改动的文件放入暂存区 (IDE可以直接commit是因为commit的时候IDE自动add了)

资源库(Repository)

  • 资源库(或版本库),就是安全存放数据的位置,这里面有提交到所有版本的数据
  • commit就将代码放入资源库

远程仓库(Remote Directory)

  • 远程仓库,托管代码的服务器,commit之后将本地仓库push到远程仓库

在这里插入图片描述

git — 文件状态

Untracked:

  • 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制, 可以通过gitignore文件控制

Unmodify:

  • 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.如果使用git rm移出版本库, 则成为Untracked文件

Modified:

  • 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git restore 则丢弃修改过,返回到unmodify状态.

Staged:

  • 暂存状态。通过git add 或者 git stage 将文件变为modified状态
  • 可以执行git commit则将修改同步到库中,

git — branch 和 HEAD

  • branch就是分支的意思
  • 在日常开发过程中, 一般分为主分支(通常叫master或者main) 和其他分支,
  • 其他分支: 当需要开发新的功能的时候, 从主分支上新建一个分支(通常使用功能内容命名), 当功能开发完毕的时候, 把新建的分支merge回主分支
    在这里插入图片描述

分支的本质是什么

  • 分支的本质是指针, 分支的名字(包括master, main) 就是指针的名字
  • 在git中, 每一次commit都会生成一个节点, 包括文件信息, 继承信息, 和 commitID
  • commitID是一个hash值, 日常使用中可以直接用hash值的前四位代替
  • 而branch就是指向一个节点的指针

Example:

  • 下图是一个主分支
    在这里插入图片描述
  • 现在需要修改一个bug, 所以新建一个分支, 执行 git branch bugFix
  • 可以看到新的分支指针和master指向同一个commit节点
  • 星号表示目前所在的分支
    在这里插入图片描述
  • 现在在bugFix这个分支上进行开发, 修改bug, 然后执行git commit
  • 主分支main指向C1节点, bugFix分支指向C2节点
    在这里插入图片描述
  • 此时main有了新的代码提交(比如其他开发者), 生成了新的节点C3
    在这里插入图片描述
  • bugFix开发完成, 需要合并进主分支
  • 在主分支上指向 git merge bugFix, 主分支自动创建cmmit节点C4. Merge完成, C4就是包含了C3和C2的版本
    在这里插入图片描述

更深一层 ---- HEAD指针

  • 在git中其实我们是不能直接操控分支指针的(包括主分支main)
  • git中所有对分支指针的操作都是通过操控HEAD指针完成
  • HEAD指针会被attach到一个分支指针, 这样就可以对对应的分支指针进行操作

Example: 移动HEAD指针
在这里插入图片描述

  • 执行 git checkout commitID 操作, 这里就是 git checkout C4
  • 将HEAD和bugFix指针 detach

在这里插入图片描述
Example: 移动HEAD指针

  • 在下图的状态下直接执行git checkout commitID 可以将HEAD指针直接移动到所对应的commit节点

在这里插入图片描述

  • 执行 git checkout C3
    在这里插入图片描述

Example: 使用HEAD移动其他分支指针

  • 目前HEAD是detached状态, 现在需要将bugFix移动到C0, main移动到C6
    在这里插入图片描述
  • 执行git checkout C0, 将HEAD移动到C0
    在这里插入图片描述
  • 执行git switch bugFix 切换到bugFix分支
  • 执行 git branch -f bugFix HEAD 将bugFix指针移动到C0
    在这里插入图片描述
    8 执行git checkout C0, 将HEAD移动到C6
  • 执行 git branch -f main HEAD 将main移动到C6
    在这里插入图片描述
  • 执行git switch main 或者 git checkout main, 将HEAD attch到main
    在这里插入图片描述
  • 使用 ~N 符合可以将其他分支移动到HEAD分支的前N个节点
  • 比如 git branch -f bugFix HEAD~2 就是将bugFix移动到HEAD之前的两个节点上

git — 一次正常的git提交流程

  • 首先使用 git status 查看目前的git状态
    在这里插入图片描述
  • 在文件夹中创建一个新的文件, 然后查看状态, 因为是新建文件, 所以目前文件是untracked状态
    在这里插入图片描述
  • 执行git add . 或者 git add test.txt, 然后查看状态
  • 文件已经加入暂存区(Index), 可以被commit
    在这里插入图片描述
  • 执行 git coomit -m “first commit” 将更改提交, 并用git log查看comit信息
    在这里插入图片描述
  • 对test内容进行更改, 查看git状态
  • 因为之前已经被加入git, 所以这次不是untracked状态, 而是modified状态
    在这里插入图片描述
  • 使用git stage test.txt 或者 git add . 或者 git add test.txt 将修改放入暂存区
    在这里插入图片描述
  • 使用git log查看commit信息
    在这里插入图片描述
  • 也可以使用 git log --oneline --graph 查看
  • 可以显式分支信息和HEAD指针信息
    在这里插入图片描述
  • 创建一个新的分支bugFix, 可以看到1730376 这个节点上有三个指针, 分别是HEAD, master, bugFix
    在这里插入图片描述
  • 切换到bugFix分支, 然后对文件进行修改
    在这里插入图片描述
  • 在bugFix分支进行commit提交, 然后查看log
  • 可以看到HEAD和bugFix移动到了ddac8b1这个commit节点
    在这里插入图片描述
  • 切换回master分支, 然后进行merge, 再查看log
  • 可以看到master被移动到了ddac8b1这个节点
    在这里插入图片描述
  • 注意 Fast-forward, 说明只是简单的把master指针向前移动了一下, 而并不是生成了新的commit节点
  • 如果master分支在bugFix之前有了新的commit, 这时再merge bugFix就不是Fast-forward了, 而是会生成新的commit节点
  • 如下: 当main分支在C3上时执行 git merge bugFix, C4就是新创建的节点
    在这里插入图片描述

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

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

相关文章

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…

mac 解决 vscode 权限不足问题,Insufficient permissions

commod 空格,输入终端并打开写入指令 sudo chown -R xxxxxx1 xxxxx2(例如我的sudo chown -R admin Desktop,具体参数查看下方) x1: 用户名,可通过左上角查看 x2: 目标文件夹。可以另起一个终端,用cd 和 l…

vue+element项目创建步骤

一、创建vue项目步骤 要创建一个Vue Element UI的项目,你可以按照以下步骤进行操作: 1.确保你已经安装了Node.js和npm(Node.js的包管理器)。你可以在命令行中运行以下命令来检查它们是否已经安装: node -vnpm -v2.使…

《开发实战》18 | 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?

取长补短之 Redis vs MySQL 做一个简单测试,分别填充 10 万条数据到 Redis 和 MySQL 中。MySQL 中的 name字段做了索引,相当于 Redis 的 Key,data 字段为 100 字节的数据,相当于 Redis 的Value。在我的电脑上,使用 wr…

基于SpringBoot的企业客户管理系统的设计与实现【附PPT|万字文档(LW)和搭建文档】

主要功能 后台登录: 可注册员工:工号、密码、姓名、身份证、手机、邮箱 员工: ①首页、个人中心、修改密码、个人信息 ②客户信息管理、项目信息管理、项目收益管理等 后台登录: 管理员: ①首页、个人中心、修改密码、…

kubernetes问题(一)-异常事件

1 pod状态处于Evicted 0/1 现象: 1)kubectl get events发现“failed to garbage collect required amount of images”。 2)同时磁盘空间不足的节点有大量pod处于Evicted 0/1状态,但并未进行重新调度。 原因描述: …

一文了解什么SEO

搜索引擎优化 (SEO) 是一门让页面在 Google 等搜索引擎中排名更高的艺术和科学。 一、搜索引擎优化的好处 搜索引擎优化是在线营销的关键部分,因为搜索是用户浏览网络的主要方式之一。 搜索结果以有序列表的形式呈现,网站在该列表中的排名越高&#x…

ubuntu 软件包管理之一

在 Ubuntu 操作系统中,软件包管理扮演着至关重要的角色,为用户提供了安装、更新和卸载各类应用程序、工具和库的关键工具。本文将引导您探索从软件包基础知识的了解,到制作自己的软件包,再到维护和共享软件包的全过程。无论您是普通用户还是开发者,了解如何处理软件包都是…

小样本规模船型优化策略的选择研究

天洑软件基于自研智能优化软件AIPOD在船舶行业的应用发表论文《小样本规模船型优化策略的选择研究》刊录于核心期刊《中国造船》。全文如下: 小样本规模船型优化策略的选择研究 陈骏喆,姜 栋,张 儒,张 明 (南京天洑…

聊聊druid的borrow行为

序 本文主要研究一下druid的borrow行为 getConnection com/alibaba/druid/pool/DruidDataSource.java public DruidPooledConnection getConnection() throws SQLException {return getConnection(maxWait);}public DruidPooledConnection getConnection(long maxWaitMillis…

UniAccess Agent卸载

异常场景: UniAccess Agent导致系统中的好多设置打不开 例如:ipv4的协议,注册表,host等等 需要进行删除,亲测有效,及多家答案平凑的 借鉴了这位大神及他里面引用的大神的内容 https://blog.csdn.net/weixin_44476410/article/details/121605455 问题描述 这个进…

Redis 字符串操作实战(全)

目录 SET 存入键值对 SETNX SETEX SETBIT SETRANGE MSET 批量存入键值对 MSETNX PSETEX BITCOUNT 计算值中1的数量 BITOP 与或非异或操作 DECR 减1 DECRBY APPEND 追加 INCR 自增 INCRBY INCRBYFLOAT GET 取值 GETBIT GETRANGE GETSET 取旧值赋新值 MGET …

权限提升Linux篇

提权工具 https://github.com/liamg/traitor https://github.com/AlessandroZ/BeRoot https://github.com/rebootuser/LinEnum https://github.com/mzet-/linux-exploit-suggester https://github.com/sleventyeleven/linuxprivchecker https://github.com/jondonas/linux…

Git学习笔记4

GitHub是目前最火的开源项目代码托管平台。它是基于web的Git仓库,提供公有仓库和私有仓库,但私有仓库是需要付费的。 到Github上找类似的项目软件。 GitLab可以创建免费的私有仓库。 GitLab是利用 Ruby开发的一个开源的版本管理系统,实现一个…

如何使用Docker安装最新版本的Redis并设置远程访问(含免费可视化工具)

文章目录 安装Docker安装Redisredis.conf文件远程访问Redis免费可视化工具相关链接Docker是一种开源的应用容器引擎,使用Docker可以让我们快速部署应用环境,本文介绍如何使用Docker安装最新版本的Redis。 安装Docker 首先需要安装Docker,具体的安装方法可以参考Docker官方文…

使用 rtty 进行远程 Linux 维护和调试

rtty 是一个用于在终端上进行远程连接和数据传输的工具。它提供了一种简单的方式来与远程设备进行通信,使得在不同主机之间传输数据变得更加方便。 安装 rtty 是一个可执行程序,可以在 Linux、macOS 和 Windows 等平台上使用。 Linux/macOS 在终端中执…

开发者必备!如何将闲置iPad Pro打造为编程工具,使用VS Code编写代码

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. ipad pro通过软件远程vscode6.1 创建TCP隧道 7. ip…

Java-day17(反射)

Reflection(反射) 动态语言的关键 允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法提供的功能: 在运行时判断任意一个对象所属类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在…

怒刷LeetCode的第15天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:哈希表双向链表 方法二:TreeMap 方法三:双哈希表 第二题 题目来源 题目内容 解决方法 方法一:二分查找 方法二:线性搜索 方法三:Arrays类的b…

基于SpringBoot的在线文档管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 员工功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势…