Git图解-常用命令操作
目录
一、前言
二、初始化仓库
三、添加文件
四、Git 流程全景图
五、Git工作流程
六、工作区和暂存区
七、查看文件状态
八、查看提交日志
九、查看差异
十、版本回退
十一、管理修改
十二、修改撤销
十三、删除文件
十四、分支管理
十五、项目分支操作
十六、文件冲突
十七、转视频版
一、前言
接着上篇:Git图解-为啥是Git?怎么装?接下来,看下Git常用命令有哪些。
二、初始化仓库
Git操作前需要初始化仓库,用于存储版本管理的项目代码,目前Git仓库有2种类型:
-
本地仓库:是在开发人员自己电脑上的仓库
-
远程仓库:是在远程服务器上的仓库(跟团队其他成员共用,此处暂时不讲)

配置自己名称与邮箱账户,在公司一般是自己名称拼音与公司工作邮箱
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

初始化本地仓库
git init

命令执行后,会在当前目录下多了一个.git的目录,这个目录是Git本地仓库,用于跟踪与管理代码(文件),没事别手动修改这个目录里面的文件,容易改乱了,导致Git仓库给蹦了。

这里要注意,部分小伙伴电脑没勾选 隐藏项目 选项,会看不见 .git 目录

三、添加文件
仓库初始化好了,怎么将文件添加到仓库,并管理起来呢?
步骤1:创建一个普通文本文件

步骤2:将文件添加到暂存区
git add readme.txt
步骤3:将文件添加到版本库
git commit -m "添加了readme.txt文件"

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。 git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件)
扩展
如果后续添加文件多了,可以使用下面命令
git add file1.txt
git add file2.txt file3.txt
git add . 当前文件夹下所有文件
git commit -m "add 3 files."
四、Git 流程全景图

五、Git工作流程


六、工作区和暂存区
在Git中进行 crud 操作时都需要执行 git add 文件这个操作,底层操作将操作文件添加一个叫缓存区区域中缓存,当操作完毕之后,使用 git commit 操作,进行统一提交,将编辑文件统一同步版本中


七、查看文件状态
问题:如何查看项目目前的状态?我在电脑前写了一段时间代码,用Git管理,中途上厕所,然后又去吃了个苹果,继续回来工作,不记得之前用Git干了些什么了?
git status # 查看当前git版本库的状态(查看缓存区中的文件内容)

八、查看提交日志
实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看
git log

git log 命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
git log --pretty=oneline

黄色长长的字符串是本次提交的commit id, 是Git使用SHA-1算法产生唯一标识符,能保证全球唯一。
九、查看差异
如果一个文件知道被人修改了,但如果能看看具体修改了什么内容,自然是更好的
比如你休假两周从国外回来,第一天上班时,已经记不清上次怎么修改的`readme.txt`,所以,需要用`git diff`这个命令看看:
git diff # 查看不同版本之间的文件差异

十、版本回退
我们不断修改文件,不断的往版本库中提交文件。就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为 commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit 恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
如果想回到上一个版本,应该怎么做呢?
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset --hard HEAD^

回到指定版本
git reset --hard <commit id>

拓展需求: 如何回退到最新版本
十一、管理修改
使用Git修改文件,存在一个需要探讨的问题:二次修改
操作方式1:
第一次修改 -> git add -> 第二次修改 -> git commit`
操作方式2:推荐使用
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

注意:建议在每次 commit 之前先检查是否有文件没有被 add
十二、修改撤销
git checkout -- filename`可以丢弃工作区的修改:-- 后面是一个空格
命令 git checkout -- readme.txt 意思就是,把 readme.txt 文件在工作区的修改全部撤销,这里有两种情况: 一:readme.txt 自修改后还没有被放到暂存区(git add),现在,撤销修改就回到和版本库一模一样的状态; 二:readme.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次 git commit 或 git add 时的状态。

注意: git checkout -- file 命令中的 -- 很重要,没有 -- ,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到 git checkout 命令
十三、删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了
git rm test.txt
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:
删除完成后需要 commit
如果删除了想恢复,可以使用 reset 版本恢复
步骤1:本地删除没用的文件(查看状态)

步骤2:先 add 以下(查看状态与步骤1进行比较)

步骤3:提交删除文件

十四、分支管理
分支管理的是Git灵魂,开发必不可少基本操作,必须掌握。
为啥存在分支?因为项目成品经过这几个流程: 开发, 测试,上线,bug修改,多版本发布等。同一个项目不同版本同时开发,同时测试,同时上线,怎么确保在这种复杂情况下让项目能独立,又能相关关联执行下去呢?Git给出解决方案是分支管理, 每一个阶段就是一个分支,即可以相互独立,又可以相互合并。
查看分支
git branch

创建分支
git branch <name>

切换分支
git checkout <name>
创建 + 切换分支
git checkout -b <name>
合并分支
将某分支合并到当前分支
git merge <name>

删除分支
git branch -d <name>
十五、项目分支操作
简化版

完整版
master分支:用于版本的更新,当比较大的功能开发完成或者更新之后会有一次集体的发版,就会将所有的代码都合到master(有的公司也会用release分支发版,原理都是一样);
develop分支:一般是开发测试分支,在项目发版上线之前都会现在dev分支上统一进行测试,确保功能达标没有bug之后再推到master分支;
feature分支:用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 dev 分支;
hotfix/fixbug分支:是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。当线上某个版本出现了问题,将检出对应版本的代码,创建 Hotfix 分支,问题修复后,合并回 dev和master ,这里注意,合并到 master 的时候,一般要打上修复后的版本标签。
扩展阅读:一种优雅的Git分支实践_git 分支管理最佳实践_浪飞yes的博客-CSDN博客
十六、文件冲突
分支1中有个文件跟其他分支文件一样,如果同时发生修改了,进行合并,就出现文件冲突问题。



到这,本篇就结束了,欲知后事如何,请听下回分解~
十七、转视频版
看文字不过瘾可以切换视频版:4小时让你直接上手Git操作
相关文章:
Git图解-常用命令操作
目录 一、前言 二、初始化仓库 三、添加文件 四、Git 流程全景图 五、Git工作流程 六、工作区和暂存区 七、查看文件状态 八、查看提交日志 九、查看差异 十、版本回退 十一、管理修改 十二、修改撤销 十三、删除文件 十四、分支管理 十五、项目分支操作 十六、…...
LeetCode096不同的二叉搜索树(相关话题:卡特兰数)
目录 题目描述 解题思路 代码实现 进出栈序列理解卡特兰数分析策略 相关知识 参考文章 题目描述 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: …...
软件测试7
一 CS和BS软件架构 CS:客户端-服务器端,BS:浏览器端-服务器端 区别总结: 1.效率:c/s效率高,某些内容已经安装在系统中了,b/s每次都要加载最新的数据 2.升级:b/s无缝升级,…...
12 结构:如何系统设计框架的整体目录?
到现在,我们已经将 Gin 集成到框架 hade 中,同时又引入了服务容器和服务提供者,明确框架的核心思想是面向服务编程,一切皆服务,所有服务都是基于协议。后续也会以服务的形式,封装一个个的服务,让…...
假如你知道这样的MySQL性能优化
1. 为查询缓存优化你的查询 大多数的 MySQL 服务器都开启了查询缓存。这是提高性最有效的方法之 一,而且这是被 MySQL 的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同…...
79、ClimateNeRF: Physically-based Neural Rendering for Extreme Climate Synthesis
简介主页物理模拟可以很好地预测天气影响。神经辐射场产生SOTA场景模型。ClimateNeRF 允许我们渲染真实的天气效果,包括雾霾、雪和洪水 ,结果可以通过有物理意义的变量来控制,比如水位 ,这允许人们可视化气候变化的结果将对他们产…...
前端面试题(一)
目录 前言 一、css3实现布局的方式有哪些? 1.flex布局 2.grid布局 二、jquery的扩展机制? 三、jquery动画和css实现动画的本质区别? 四、不使用css的动画,如何实现盒子从左到右移动? 五、使用过的框架…...
Java基础常见面试题(七)
序列化和反序列化 Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。 序列化: 序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地…...
【springmvc】报文信息转换器
HttpMessageConverter HttpMessageConverter,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文 HttpMessageConverter提供了两个注解和两个类型: RequestBody, ResponseBody, Reques…...
3.5知识点复习
extern:表示声明。 没有内存空间。 不能提升。const:限定一个变量为只读变量。volatile:防止编译器优化代码。volatile int flg 0; register:定义一个寄存器变量。没有内存地址。register int a 10;字符串:C语言中&a…...
湖南中创教育PMP分享项目经理有哪些优势?
项目经理拥有超强的计划能力;具备大局意识;沟通能力特别强;具备更大的灵活性和反应能力以及总结汇报能力 1、超强的计划能力 项目经理几乎无时无刻都在做计划,因此也就更擅长做计划。 项目管理要抓重点,有主次地处理…...
LeetCode:27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…...
麻雀算法SSA优化LSTM长短期记忆网络实现分类算法
1、摘要 本文主要讲解:麻雀算法SSA优化LSTM长短期记忆网络实现分类算法 主要思路: 准备一份分类数据,数据介绍在第二章准备好麻雀算法SSA,要用随机数据跑起来用lstm把分类数据跑起来将lstm的超参数交给SSA去优化优化完的最优参数…...
哈希表题目:数组中的 k-diff 数对
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题:数组中的 k-diff 数对 出处:532. 数组中的 k-diff 数对 难度 4 级 题目描述 要求 给定一个整数数组 nums\texttt{nums}nums 和一个整数 k…...
SAP ERP系统PP模块计划策略2050详解
SAP/ERP系统中面向订单生产的计划策略主要有20和50两个策略,这两个策略都是面向订单生产的计划策略,也是离散制造行业应用比较广泛的策略。它们之间最大差异就是在于20策略完全是由订单驱动,而50策略是预测加订单驱动,本文主要介绍…...
TIA博途中将硬件目录更改为中文的具体方法演示
TIA博途中将硬件目录更改为中文的具体方法演示 基本步骤可参考如下: 第一步: 第二步: 具体的操作演示: 如下图所示,在所示的目录中找到zh-chs文件夹,删除或修改文件夹的名称均可,这里建议大家修改文件夹的名称,防止以后需要恢复成英文目录, 如下...
【多线程操作】线程池模拟实现
目录 一.线程池的作用 二.线程池的模拟实现 1.线程模块(Thread.hpp): 2.线程锁模块(LockGuard.hpp): 3.任务模块(Task.hpp) 4.线程池核心(ThreadPool.hppÿ…...
HBase---Hbase安装(单机版)
Hbase安装单机版 文章目录Hbase安装单机版Master/Slave架构安装步骤配置Hbase1.上传压缩包解压更名修改hbase-env.sh修改hbase-site.xml配置HBase环境变量配置Zookeeper复制配置文件修改zoo.cfg配置文件修改myid配置Zookeeper环境变量刷信息配置文件启动hbase步骤hbase shellMa…...
启动项管理工具Autoruns使用实验(20)
实验目的 (1)了解注册表的相关知识; (2)了解程序在开机过程中的自启动; (3)掌握Autoruns在注册表和启动项方面的功能;预备知识 注册表是windows操作系统中的一个核心数据…...
BFD单臂回声实验详解
13.1.1BFD概念 BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点: 对相邻转发引擎之间的通道提供轻负荷、快速故障检测。 用单一的机制对任何介质、任何协议层进行实时检测。 BFD是一个简单的“Hello”协议。两个系统之间建立BFD会…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
