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

Git企业开发控制理论和实操-从入门到深入(二)|Git的基本操作

前言 

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

高质量博客汇总https://blog.csdn.net/yu_cblog/category_12379430.html

然后就是博主最近最花信息的一个专栏《Git企业开发控制理论和实操》希望大家多多关注!
Git企业开发控制理论和实操https://blog.csdn.net/yu_cblog/category_12419275.html?spm=1001.2014.3001.5482

博主的Github主页

里面都是一些博主自己做的项目,希望对大家有帮助。

Yufccode (Fengcheng Yu) · GitHubfocus on backend development. Yufccode has 12 repositories available. Follow their code on GitHub.https://github.com/Yufccode


Git的基本操作

创建本地仓库

命令:git init

创建好之后会多一个 .git 目录,里面是什么我们先不管,后面再说。

 不要手动修改里面的任何内容!

配置本地仓库

一进去之后首先要配置的两个东西,是一定要配置的

  • name
  • email

如果不配置在后续就会有一系列的问题。

配置使用 git config 命令

git config user.name "xxx"
git config user.email "xxx"

检查是否配置好了:

git config -l # 检查config中的所有配置

删除配置:

比如删除名字

git config --unset user.name

全局设置:

表示可以在当前机器下的所有仓库中都生效。

git config --global user.name "xxx" # 全局设置
git confit --global --unset user.name # 全局重置

认识工作区、暂存区、版本库

现在,请问这个git仓库可以管理这个README.md吗?

答案是还不可以。因为本质上.git才是仓库,外面不是。

但是.git是绝对不允许手动修改的。

其实.git里面叫做版本库(仓库),外面叫做工作区。

那么怎么样才能让README.md被管理呢?要进行一些操作。

 

这张图的工作区,就是README.md所在的地方。

stage可以称作暂存区/索引,即/index

HEAD是一个指针,只想master,这个概念我们到后面再理解。

添加文件

git add

本质是添加到stage中!

命令:

git add # 后面跟上文件名
git add . # 添加当前所有问题
git add file.log test.txt # 添加指定文件

git commit

git commit -m "add my first file" # 这里不要乱写,这里写的是提交的细节,对后续维护很重要

git log

git log

可以打印从近到远的所有提交记录。

这个是经过哈希计算出来的,很大的数字。

git log --pretty=oneline # 这样可以打印的漂亮一点

学会看懂.git目录里的文件

我们可以看看完成了一系列操作后的目录结构,如下所示。

(base) [yufc@ALiCentos7:~/Src/Bit-Courses/GitDevelopment/gitcode]$ tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       └── heads
│           └── master
├── objects
│   ├── 0d
│   │   └── f05318450b3455603cd0b0fc2cb4f4c8faa366
│   ├── 86
│   │   └── 5a7036c778b72e201a13e65b37bc35cbd83ade
│   ├── 8d
│   │   └── 9ba68bb8b2dfea545ec559b43f9f08d4d362c0
│   ├── d3
│   │   └── b98d1ce30bb03f3140dee28718bbdf08579543
│   ├── e6
│   │   └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│   ├── f4
│   │   └── 2df147c60543792b9b56e1118f11409d55e87a
│   ├── info
│   └── pack
└── refs├── heads│   └── master└── tags
​
18 directories, 24 files

我们在刚才说了,add之后东西会被放到暂存区里面去:/index

暂存区 /index

然后我们可以在目录结构中找到这个index了。

add之后的内容就会放到index里面去的!

HEAD指针

我们还要看HEAD,刚才说了HEAD是一个指针,指向master。

就是指向master的

master

可以发现,master就是最新的一次提交的commit id 

我们刚才说了,master里面存放的都是对象object的索引,可以把commit id理解成一个对象

object对象

那么如何查看object对象里面的具体内容呢?

首先要把上面的 commit id 分成两部分来看。

前两位,也就是f4表示文件夹的名称,后面表示文件名,如图所示。

但是现在查看不能直接cat了,要用一个特殊的命令

git cat-file -p [commit id]

最新的一次提交的描述信息,就写在这里。

学到这里,我们可以输出一个结论:Git追踪管理的其实就是修改,而不是文件!

修改文件

git status命令

先介绍一个命令,用于查看仓库的状态。

git status

我刚才在我的README.md里面新增了一行,然后git statues 告诉我:

Changes not staged for commit :暂存区中没有要修改的内容

修改的内容在工作区的README.md

git diff命令

git diff README.md

即:找出工作区和暂存区中README.md文件的差异。打印格式是Unix常用的diff格式。

 

修改后

我们git add .一下之后,再git status试一下

 

提交看看。

版本回退

回退操作

重点命令:

git reset [--soft | --mixed | --hard] [HEAD]

直接上例子。

我们的README.md其实是有两个版本的,一个是一开始的版本,一个是添加一行后的版本。

git reset本质是回退版本库中的内容。

--soft--mixed--hard
只回退版本库中的内容,工作区和暂存区不变版本库+暂存区回退,工作区不变回退所有区域中的内容

默认使用--mixed选项。

--hard慎用,因为如果我正在工作区进行开发,但是调用了--hard的回退,工作区的内容就直接丢失了。

在操作直线先看看日志。

 

调用git reset

回退之后,在add my first file这一次修改之后的所有修改,都会直接被回退。

如果后续需要撤销修改:也是执行git reset命令。

如果你的bash还没clear,还是能看到刚才的commit id

那直接调用git reset也是可以撤销的。

那如果你屏幕clear了呢?也是可以撤销的。

git reflog # 它可以看到本地每一次的提交命令

前面那些短的数字和字母,其实就是 commit id 的一部分。用这一部分也是可以回退的。

回退本质

本质就是一个指针动来动去而已。

撤销修改

如果我们在工作区在一个版本基础上继续开发,但是越写越觉得自己的代码是垃圾,写不下去了,想直接回到修改前的版本。

首先是有三个场景:

  • 只在工作区中改了

  • add了但没有commit

  • commit了

情况一:仅在工作区中进行了修改

git checkout -- README.md

这个命令可以让文件撤销到上一次add时候的状态。

注意:命令中的--是很重要的,如果不加--,命令是另外一个含义。

情况二:add了但没有commit

先把准备工作做一下,把工作区和暂存区的弄成一致的先。

利用git reset就行

git reset --hard ... # 这个命令也可以回退到和当前版本库内容一致的版本下,即版本库啥样就回退到啥样
git reset --hard HEAD # 表示回退到当前版本
git reset --hard HEAD^ # 表示回退到上一个版本
git reset --hard HEAD^^ # 表示回退到上两个版本,以此类推
# 当然这里面reset的选项可以自己选

情况三:已经commit

同样可以利用git reset命令。

那么我们知道HEAD是当前版本,HEAD^是上一个版本,所以情况三也是很好解决的。

git reset --hard HEAD^ # 三个区都回退到上个版本

注意:情况三有一个大的前提条件,即:commit之后没有push操作。

至于什么是push操作后续才会讲解。

为什么要有这个前提呢,不是说push了我们的代码就改不了,而是说,在企业中,跑的代码是远程仓库中的代码,不是我本地的代码。

撤销的目的:就是不影响远程仓库的代码。

删除文件

方法一

在工作区rm之后,addcommit就行了。

方法二

使用git提供的命令。

git rm file1

这个命令可以帮我们做两件事:

  • 删除工作区中的file1

  • 删除暂存区中的file1

因此我们再git commit一下就能完成删除了。

相关文章:

Git企业开发控制理论和实操-从入门到深入(二)|Git的基本操作

前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…...

Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞

Positive Technologies 专家帮助修复 Western Digital 网络存储设备中的一个危险漏洞 经过验证的攻击者可利用该漏洞在受攻击的设备上注入恶意软件并远程访问文件 Western Digital 感谢 Positive Technologies 专家 Nikita Abramov 发现 Western Digital NAS 固件中的一个漏洞…...

【springboot】springboot定时任务:

文章目录 一、文档:二、案例: 一、文档: 【cron表达式在线生成器】https://cron.qqe2.com/ 二、案例: EnableScheduling //开启任务调度package com.sky.task;import com.sky.entity.Orders; import com.sky.mapper.OrderMapper; …...

腾讯云学生服务器申请、学生认证入口及学生机价格表

腾讯云学生服务器申请、学生认证入口及学生机价格表,学生机申请流程,腾讯云学生服务器优惠活动:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&…...

pip安装mysqlclient依赖报错 /bin/sh: 1: mysql_config: not found如何解决

报错信息: Collecting mysqlclient2.1.0Downloading https://mirrors.aliyun.com/pypi/packages/de/79/d02be3cb942afda6c99ca207858847572e38146eb73a7c4bfe3bdf154626/mysqlclient-2.1.0.tar.gz (87 kB)|███████████████████████████…...

基于paddleocr的版面分析

前处理: DocTr: Document Image Transformer for Geometric Unwarping and Illumination Correction (1)几何矫正 给定一张存在几何和光照畸变的文档图像,我们首先用一个包含六个卷积模块的特征提取器对其进行特征提取&#xf…...

网工内推 | IT网工,华为、华三认证优先,15k*13薪

01 广东善能科技发展股份有限公司 招聘岗位:IT网络工程师 职责描述: 1、负责公司项目售后技术支持工作; 2、负责项目交付实施,配置调试、运维等; 3、参加合作厂商产品技术知识培训; 4、参加合作厂商工程师…...

leetcode 739. 每日温度

2023.8.28 本题用暴力双层for循环解会超时&#xff0c;所以使用单调栈来解决&#xff0c;本质上是用空间换时间。维护一个单调递减栈&#xff0c;存储的是数组的下标。 代码如下&#xff1a; class Solution { public:vector<int> dailyTemperatures(vector<int>&…...

【活体检测模型】活体检测思路推演

ref:https://arxiv.org/pdf/1611.05431.pdf https://github.com/miraclewkf/ResNeXt-PyTorch 用分类的思想做活体检测&#xff0c;要求准确的分出正负样本&#xff0c;否则&#xff0c;支付宝被别人用了&#xff0c;问题就很严重。 大部分的商用场景还是 摇摇头、张张口&#x…...

【微服务部署】03-健康检查

文章目录 1. 探针集成实现高可用1.1 LivenessProbe1.2 ReadinessProbe1.3 StartupProbe 2. 健康检查看板2.1 组件包 1. 探针集成实现高可用 LivenessReadinessStartup 1.1 LivenessProbe 判断服务是否存活结束“非存活”状态服务根据重启策略决定是否重启服务 1.2 Readines…...

SQL注入之报错注入

文章目录 报错注入是什么&#xff1f;报错注入获取cms账号密码成功登录 报错注入是什么&#xff1f; 在注入点的判断过程中&#xff0c;发现数据库中SQL 语句的报错信息&#xff0c;会显示在页面中&#xff0c;因此可以利用报错信息进行注入。 报错注入的原理&#xff0c;就是在…...

基于大数据+django+mysql的银行信用卡用户的数仓系统

系统阐述的是银行信用卡用户的数仓系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…...

【网络】多路转接——五种IO模型 | select

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 五种IO模型 | select &#x1f367;五种IO模型&#x1f367;select&#x1f9c1;认识接口&#x1f9c1…...

sql顺序倒序查询

要根据 orderNum 字段的顺序查询&#xff0c;你可以使用 SQL 的 ORDER BY 子句。默认情况下&#xff0c;ORDER BY 是按升序排序的&#xff0c;但你可以使用 DESC 关键字来指定降序排序。 以下是一个示例查询&#xff0c;按照 orderNum 字段的顺序将结果返回&#xff1a; SELEC…...

java和sql生成时间维度数据

JAVA: POM依赖&#xff1a; <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.2</version></dependency> 代码&#xff1a; package com.kone.kcdp.common;import cn.hutool.co…...

HUT23级训练赛

目录 A - tmn学长的字符串1 B - 帮帮神君先生 C - z学长的猫 D - 这题用来防ak E - 这题考察FFT卷积 F - 这题考察二进制 G - 这题考察高精度 H - 这题考察签到 I - 爱派克斯&#xff0c;启动! J - tmn学长的字符串2 K - 秋奕来买瓜 A - tmn学长的字符串1 思路&#x…...

sm4 加解密算法工具类( Java 版 )

sm4 加解密算法工具类&#xff08;java&#xff09; 说明&#xff1a;密钥是 hexString import java.security.Key; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec;import cn.hutool.core.codec.Base64Decoder; import…...

Redis项目实战——商户查询缓存

目录 为什么要用Redis实现商户查询缓存&#xff1f;用Redis实现商户查询缓存的基本思路&#xff1f;使用Redis缓存的问题及解决方法&#xff1f;一、如何保持数据库数据和Redis缓存数据的一致性&#xff1f;1 内存淘汰机制2 超时剔除机制3 主动更新机制&#xff08;胜&#xff…...

重磅OpenAI发布ChatGPT企业版本

8月29日凌晨&#xff0c;Open AI官网发布ChatGPT企业版本&#xff01; 企业版简介&#xff1a; ChatGPT企业版提供企业级安全和隐私、无限的高速 GPT-4 访问、用于处理更长输入的更长上下文窗口、高级数据分析功能、自定义选项等等。人工智能可以协助和提升我们工作生活的各个…...

# Go学习-Day7

文章目录 断言文件打开/关闭文件读取文件写入文件 命令行参数解析Argsflag包 JSON 个人博客&#xff1a;CSDN博客 断言 type Node struct {x inty int }func main() {var a interface{}var n Node Node{1, 2}a nvar b Nodeb a.(Node)fmt.Println(b) }此处我们有一个结构体…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...