Git --- 基础介绍

news2024/12/25 12:26:54

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.coloradmin.cn/o/1020863.html

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

相关文章

家政小程序开发制作,家政保洁上门维修小程序搭建

家政小程序开发制作,现如今家政上门服务,也越来越普及到我们的生活中,比如家电清洗,水电维修,家政保洁,上门护理等等方面。那么一个合格的家政小程序,需要满足哪些功能呢?今天就带大…

视频图像处理算法opencv模块硬件设计图像颜色识别模块

1、Opencv简介 OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上 它轻量级而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Rub…

Stable Diffusion AI绘图使用记录

1、下载安装使用 官方网站https://github.com/AUTOMATIC1111/stable-diffusion-webui 跟着一步步安装就行(英文版的) 2、真人转二次元 下载控制插件Contro lnetGitHub - Mikubill/sd-webui-controlnet: WebUI extension for ControlNet 按照官方的安…

爬虫 — 反爬

目录 一、UA 反爬二、Cookie 验证与反爬1、Cookie 简介2、使用 Cookie 原因3、Cookie 作用3.1、模拟登录3.2、反反爬 三、Referer 反爬 一、UA 反爬 UA(User Agent):用户代理,是一个特殊字符串头,使得服务器能够识别客…

深入解读什么是期权的内在价值和时间价值?

期权品种越来越丰富,对于大家套利对冲都有很多的选择。而有些初学者对时间价值一直不理解,今天呢,就给大家讲一讲深入解读什么是期权的内在价值和时间价值?本文来自:期权酱 01在期权交易过程中,想必大家都会…

Layui快速入门之第十四节 分页

目录 一:基本用法 API 渲染 属性 二:自定义主题 三:自定义文本 四:自定义排版 五:完整显示 一:基本用法 分页组件 laypage 提供了前端的分页逻辑,使得我们可以很灵活处理不同量级的数…

SAP MM学习笔记32 - 购买依赖的承认(采购申请的审批)

多数公司都不会随便让采购员买东西的,而是要设置一个审批,甚至是层层审批,之后才能购买。 一般流程是 购买依赖(采购申请) > 购买发注(采购),这个承认(审批&#xf…

PyCharm使用技巧小记

目录 1 汉化2 主题3 关联滚轮和字体大小4 快捷键4.1 常用快捷键4.2 查看软件快捷键5 上下文菜单取消 注:本文基于PyCharm 2023.2.1 版本进行截图演示。不同版本有所差异,注意区分。 1 汉化 1、点击右上角‘齿轮’图标 2、单击插件 3、在上方搜索框中…

python selenium如何带cookie访问网站

python selenium如何带cookie访问网站 要使用Python的Selenium库带有cookie访问网站,你可以按照以下步骤进行操作: 一、流程介绍 安装Selenium库(如果尚未安装): pip install selenium导入Selenium库并启动一个浏览…

DragGAN使用记录

效果图 调整人物动作 调整裙子长度 调整动物的动作 DragGAN介绍 DragGAN是一种基于人工智能的图像编辑工具,它可以根据用户的输入生成逼真的图像。与传统的图像编辑工具只能扭曲或裁剪现有的像素不同,DragGAN可以创建与用户意图匹配的新内容。 Drag…

Kubernetes网络揭秘:看完你就懂了

一、Master集群网络 master集群的网络比较简单,和通常的负载均衡集群一样。多个节点的apiserver的ip与端口(6443)使用负载均衡的ip与端口。在master/node节点join时均使用此负载均衡的ip与端口,这样就是master节点的集群网络。 master 节点之间的网络&a…

QT:使用多窗口做一个登录注册小项目(登录窗口、登录结果窗口、注册窗口)

widget.h(登录窗口) #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QCheckBox> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <Qmap> //模板类class Widget : public QWidget …

7年阿里测试经验之谈 —— 用UI自动化测试实现元素定位

随着IT行业的发展&#xff0c;产品愈渐复杂&#xff0c;web端业务及流程更加繁琐&#xff0c;目前UI测试仅是针对单一页面&#xff0c;操作量大。为了满足多页面功能及流程的需求及节省工时&#xff0c;设计了这款UI 自动化测试程序。旨在提供接口&#xff0c;集成到蜗牛自动化…

软件测试:什么是敏捷测试?

1. 什么是敏捷测试 敏捷测试是一种在敏捷开发环境中进行软件测试的方法&#xff0c;不同于传统瀑布模型中的测试阶段&#xff0c;敏捷测试强调持续测试、快速反馈和合作开发。 敏捷测试与敏捷开发相辅相成&#xff0c;通过频繁的迭代和增量开发来提高软件的交付速度和质量。 …

C++QT day9

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

基于GPIO子系统编写LED灯驱动

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #incl…

【Spring】IOC基本用法

&#x1f388;博客主页&#xff1a;&#x1f308;我的主页&#x1f308; &#x1f388;欢迎点赞 &#x1f44d; 收藏 &#x1f31f;留言 &#x1f4dd; 欢迎讨论&#xff01;&#x1f44f; &#x1f388;本文由 【泠青沼~】 原创&#xff0c;首发于 CSDN&#x1f6a9;&#x1f…

js自带的字体图标

let body document.querySelector(body)body.width 100%for (let i 1; i < 10000; i) {let str &#i;let sm str.big()let st document.createElement(span)st.innerHTML smst.style.fontSize 30pxbody.appendChild(st)} 结果如下

Vue2+Vue3基础入门到实战项目全套教程的学习笔记

内容的视频链接点击此处可进入 这套笔记是按照视频和视频笔记总结的笔记&#xff0c;主要是方便vue的学习或温习&#xff0c;基本抛弃css样式的添加&#xff0c;专注于vue的使用。 第一天 Vue 快速上手 Vue的概念 Vue 是一个用于 构建用户界面 的 渐进式 框架 创建实例 …

在线Excel转JSON工具

在线Excel转JSON工具 上传excel将数据转换成json格式