网易工程师 Ruheng 一文教你轻松学会 Git

视觉检测在激光打码字符检测上的检测案例 在机器视觉检测技术中,OCR识别是比较典型的应用,应用的场景也比较丰富,基本上在制造业,每个工厂或者印刷厂都会用到视觉OCR识别检测,OCR字符识别的原理很简单,通过图像分割后,对字符进行学习、命名。在工业相机拍摄图像后,软件进行处理,从而读取结果。 随着技术的发展,激光打标技术被更多的应用在生产过程中,由激光打标代替油墨进行字符印刷,速度更快、效果更好。 但是随之而来的是在视觉检测上带来的影响,目前市面上应用的字符检测设备大多是由集成商单独开发的软件,在检测油墨印刷时,图像上的字符没有断点,非常连贯,所需 阅读详情

在日常工作中,经常会用到Git操作。但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令。

Git工作流程

640?wx_fmt=png

以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。

  • Workspace:工作区

  • Index / Stage:暂存区

  • Repository:仓库区(或本地仓库)

  • Remote:远程仓库

工作区

程序员进行开发改动的地方,是你当前看到的,也是最新的。

平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。

暂存区

.git目录下的index文件, 暂存区会记录 git add添加文件的相关信息(文件名、大小、timestamp...),不保存文件实体, 通过id指向每个文件实体。可以使用 git status查看暂存区的状态。暂存区标记了你当前工作区中,哪些内容是被git管理的。

当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过 git add先提交到暂存区,被git管理。

本地仓库

保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些。

git commit后同步index的目录树到本地仓库,方便从下一步通过 git push同步本地仓库与远程仓库的同步。

远程仓库

远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

小结

  1. 任何对象都是在工作区中诞生和被修改;

  2. 任何修改都是从进入index区才开始被版本控制;

  3. 只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;

  4. 与协作者分享本地的修改,可以把它们push到远程仓库来共享。

下面这幅图更加直接阐述了四个区域之间的关系,可能有些命令不太清楚,没关系,下部分会详细介绍。

640?wx_fmt=png

常用Git命令

640?wx_fmt=png

网上找了个图,别人整理的一张图,很全很好,借来用下。下面详细解释一些常用命令。

HEAD

640?wx_fmt=png

在掌握具体命令前,先理解下HEAD。

HEAD,它始终指向当前所处分支的最新的提交点。你所处的分支变化了,或者产生了新的提交点,HEAD就会跟着改变。

add

640?wx_fmt=png

add相关命令很简单,主要实现将工作区修改的内容提交到暂存区,交由git管理。

640?wx_fmt=png

commit

640?wx_fmt=png

commit相关命令也很简单,主要实现将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。

640?wx_fmt=png

branch

640?wx_fmt=png

涉及到协作,自然会涉及到分支,关于分支,大概有展示分支,切换分支,创建分支,删除分支这四种操作。

640?wx_fmt=png

关于分支的操作虽然比较多,但都比较简单好记。

merge

640?wx_fmt=png

merge命令把不同的分支合并起来。如上图,在实际开放中,我们可能从master分支中切出一个分支,然后进行开发完成需求,中间经过R3,R4,R5的commit记录,最后开发完成需要合入master中,这便用到了merge。

640?wx_fmt=png

一般在merge之后,会出现conflict,需要针对冲突情况,手动解除冲突。主要是因为两个用户修改了同一文件的同一块区域。如下图所示,需要手动解除。

640?wx_fmt=png

rebase

640?wx_fmt=png

rebase又称为衍合,是合并的另外一种选择。

在开始阶段,我们处于new分支上,执行 git rebase dev,那么new分支上新的commit都在master分支上重演一遍,最后checkout切换回到new分支。这一点与merge是一样的,合并前后所处的分支并没有改变。 git rebase dev,通俗的解释就是new分支想站在dev的肩膀上继续下去。rebase也需要手动解决冲突。

rebase与merge的区别

现在我们有这样的两个分支,test和master,提交如下:

      D---E test	
     /	
A---B---C---F master

在master执行 git merge test,然后会得到如下结果:

      D--------E	
     /          \	
A---B---C---F----G   test, master

在master执行 git rebase test,然后得到如下结果:

A---B---D---E---C'---F'   test, master

可以看到,merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。

如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase 如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge

reset

640?wx_fmt=png

reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。

640?wx_fmt=png

revert

640?wx_fmt=png

git revert用一个新提交来消除一个历史提交所做的任何修改。

revert与reset的区别

640?wx_fmt=png

  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。

  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。关于这一点,不太理解的可以看这篇文章。

  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

push

上传本地仓库分支到远程仓库分支,实现同步。

640?wx_fmt=png

其他命令

640?wx_fmt=png

本文作者 Ruheng 是来自网易的 Android 工程师,点击「阅读原文」,给作者点个赞?

640?wx_fmt=png

关注「码洞」,老钱带你码出个未来

Ubuntu零基础入门到精通【3.10讲】:旧版本 Ubuntu 升级与迁移路线:从 20.04 到 24.04 的完整实战指南 🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。 阅读详情

相关推荐

【上海大学计算机组成原理实验报告】六、内存系统实验

学习内存访问机制//理解代码和数据的分区存放原理和技术//手动方式把立即数`33H`写入内存`D1H`单元//手动方式把`D1H`单元的内容读出,再送入`ST`单元//在`CP226`汇编语言程序集成开发环境下编写程序//既然有`ORG`微指令,为什么集成开发环境下载到实验箱的目标程序的第一条执行语句最好存放在0号地址?//上海大学计算机组成原理实验//内存系统实验

HackerKevon的博客 3129

Git有这一篇就够了

在日常工作中,经常会用到Git操作。但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令。 一、Git工作流程 以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。 Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓

perry_Fan 4940

强化学习 之 Actor Critic

简介 Actor Critic是一种结合体算法: (1)Actor 的前生是 Policy Gradients,这能让它毫不费力地在连续动作中选取合适的动作,而 Q-learning 做这件事会瘫痪; (2)Critic 的前生是 Q-learning 或者其他的 以值为基础的学习法,能进行单步更新,而传统的 Policy Gradients 则是回合更新,这降低了学习效率。 算法思想 Actor...

Test_tju的博客 812

Git 实现原理,你真的了解吗?

诞生的原因最初版本的git 诞生于Linus和他的团队在开发Linux内核的过程中。一开始,Linus和他的团队选用的版本控制工具是BitKeeper(一款非开源,但是有条件免费的产品)...

程序IT圈 987

WPS文档中心和文档中台 operate 未授权访问漏洞(CVE-2025-0717)

WPS文档中心和文档中台的/open/v6/api/etcd/operate?key=/config/storage&method=get接口存在未授权访问漏洞,攻击者可通过该漏洞获取AK/SK密钥等信息,这些密钥通常用于系统内部认证和权限控制,泄露后可能导致攻击者进一步修改K8s配置、部署恶意容器或执行远程命令,最终实现对系统的完全控制。

李同學AI安全 905

机器学习实战——疫情数据分析与预测

机器学习如何做到疫情可视化——疫情数据分析与预测实战 本文将带领大家爬取11个国家以及中国31个省(自治区、直辖市)在2022.0101-2022.06.19的新冠疫情数据。并且采用机器学习模型对2022.6.20-2022.6.30每一天的全国确诊人数、死亡人数、治愈人数进行预测,**做出疫情可视化图形并且求出最终的相关系数R2!...

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 10万+

敏捷团队Git分支版本管理策略| TBD++ Flow

​简介 随着Git的普及,为了更高效地进行团队协作开发,人们通过经验总结研究出了几套适用于各种团队和项目的分支管理策略,上篇文章我们讲解了 Git Flow 代码版本管理策略,它对版本控制较为严格,主要适合开发团队规模较大、开发周期较长,可达几周至几个月的项目,同时,文章提供了版本管理方案图及必要的讲解。 接下来将介绍Git 分支管理策略:TBD++ Flow,该版本管理策略整合了其他策略的优点,适合敏捷开发团队,开发周期长、快速迭代均适用。先看一下工作流图。 TBD++ Flow 工作流图 TBD++

技术管理修行 2583

手把手教你学 GPU KMD”相关内容的专栏简介与目录

本专栏系统讲解GPU内核模式驱动(KMD)开发技术,涵盖四大核心模块:1)GPU驱动架构基础,解析UMD/KMD协同机制;2)KMD核心功能,包括内存管理、命令提交、中断处理等;3)底层硬件交互,详解PCIe/DMA传输、多级页表等;4)实战进阶,结合Linux DRM框架代码分析,探讨GPU虚拟化与性能优化。面向具备OS和C语言基础的开发者,提供从理论到实践的完整学习路径,帮助深入理解图形/计算驱动栈的底层实现原理。

amy_mhd的博客 154

Hello Git(二)——Git内部实现机制

一、Git仓库内部实现简介 Git本质上是一个内容寻址(content-addressable)的文件系统,根据文件内容的SHA-1哈希值来定位文件。Git核心部分是一个简单的键值对数据库(key-value data store)。向Git数据库插入任意类型的内容,会返回一个键值,通过返回的键值可以在任意时刻再次检索(retrieve)插入的内容。通过底层命令hash-object可以将任意数据保存到.git目录并返回相应的键值。 Git包含一套面向版本控制系统的工具集,包括高级命令和底层命令。高级命

天山老妖 1580

SAP 系统升级不再惧怕 SPAU 与 SPDD:把修改调整做成可控的工程

SAP系统升级中的SPAU/SPDD处理要点:首先明确SPDD处理数据字典对象,SPAU处理程序对象,核心是解决标准对象变更与历史修改的继承问题。关键原则是优先回归标准版本,减少后续升级负担。操作时应利用版本管理对比差异,批量处理可回退对象,并通过F9多选提高效率。对于提示"当前版本与建议一致"的对象直接回归标准。注意区分新旧SPAU界面功能差异,将Note下载移至SNOTE处理,并确保在SPDD/SPAU之后处理SPAU_ENH。最后,所有调整需记录日志并纳入传输请求,确保可追溯性。遵

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 392

【华为OD机试真题】29、组成最大数 | 机试真题+思路参考+代码解析 (C++、Java、Py、C语言、JS)

题目描述 >小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字

KJ.JK 2419

git cherry-pick命令使用

用途:重新生成commitID,在原先其他分支或者本地分支的其他commit之上,然后git push到远端1、在分支A重新提交我在分支B做的一次功能修改,并在分支A提交。2、另一种情况在分支A(在未跟新代码的情况下修改了好几个功能,本地有好几个commit提交),我不能向远端用(git push origin 本地分支 远程分支),我往往会用先用git reset --HARD 到最新merge...

冰夫子的博客 6914

[Python图像识别] 五十二.水书图像识别 (2)基于机器学习的濒危水书古文字识别研究

上一篇文章详细讲解如何利用数据增强方法实现图像数据集的扩充,并以濒危水书作为案例讲解。这篇文章将详细讲解基于机器学习的水书图像识别方法,以图像像素统计为特征开展图像分类讲解,这是最基础的方法,也为后续深度学习图像分类描述提供支撑。基础性文章,希望对您有所帮助!让我们开始吧,且看且珍惜。

杨秀璋的专栏 990

git 中的rebase 与cherry-pick实战

遇到的问题 ## 在项目中遇到这样的一个问题   master分支包含记录:base1,test1,test2,test3,test4   dev分支是基于master的base1后开发的,base1,dev1,dev2,dev3,现在怎么把dev1,dev2,dev3的代码同步到同主分支上? 思路有2个 1) perry-pick,打开idea,选择主分支上对应的记录,点击perry-pick,...

mingtiandexia的专栏 2146

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

git实现原理(从常见的操作来解释git的底层原理,再也不怯)

了解了git原理,就可以在使用git时更加得心应手

Java新生代 5384

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Git 工作原理详解(附:常用 Git 命令)

Git 简介: git是一个分布式管理系统 ( 分布式: 在客户端和服务端都具有版本控制能力 ) 作用: 管理源代码 方便多任协同开发 方便版本控制 ( 可以以最快的速度恢复到指定版本 ) 仓库: 在我们文件中如果有.git文件夹, 即标记着代码仓库已经建立 .git 同级目录下的文件都会被管理起来 Git 原理图: 常用命令: git init ...

Nick.Peng's Blogs 968

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

三分钟上手! 一文看懂 Git 的底层工作原理

三分钟上手! 一文看懂 Git 的底层工作原理

云满笔记 693

git 原理简介

文章目录关于版本控制分为三种版本控制方案本地版本控制集中化的版本控制分布式版本控制 关于版本控制 什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。 作用: 如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就

安梓晨的博客 8068

Git 原理及使用 (带动图演示)

1. Git 安装。2. Git 工作区、暂存区和版本库。3. Git 基本操作。4. Git 分支管理。5. Git 远程操作。6. Git 标签管理

shangguanxiu的博客 7014

超详细的 Git 实战教程

一:Git是什么? Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速...

muzidigbig的博客 3688

git版本控制的底层实现

Git的重要性Git是一个开源的版本控制工具,广泛用于编程开发领域。它极大地提高了研发团队的开发协作效率。对于开发者来说,Git是一个不可或缺的工具。学习底层原理的必要性逻辑性: 工科领域强调逻辑性,结论往往基于推导而非记忆。深度理解: 了解Git的底层存储原理,可以避免仅靠记忆操作指令,实现真正的随学随用。知识拓展: 掌握原理后,即使忘记具体命令,也可以基于原理重新推导,降低学习新知识的难度。学习目标全面掌握: 理解Git的每个命令背后的模型变动和实现原理。灵活应用。

z3551906947的博客 1104

从零实现一个在线GIT平台并一文道尽git

本文介绍了基于Spring Boot开发的多版本文件管理后台核心设计,重点解决了游戏数值开发中的多人在线编辑和版本控制问题。系统采用"只增不改"的设计模式,通过文件数据表(Data_File)和文件夹表(Data_Folder)实现嵌套文件系统,并利用Hash值判断内容变更。版本管理采用数据快照(Data_Snap)记录文件系统状态,支持创建分支、合并等操作。关键创新点包括:1) 通过创建新记录而非修改现有记录实现版本快照;2) 采用三路归并算法处理版本合并;3) 构建有向无环图(DAG

JJTX00的博客 1065

git(9)Git 内部原理

9 Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式。我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认为这些内容对于初学者来说可能难以理解且过于复杂。正因如此我把这部分内容放在最后一章,你在学习过程中可以先阅读这部分,也可以晚点阅读这部分,这完全取决于你自己。 既然已经读到这了,就让我们开始吧。首先要弄明白一点,从根本上来讲 Git 是一套内容寻址 (content-addressa..

water Wang 575

从零开始一个git操作实例,图文并茂

徒弟不懂git怎么用,于是写了篇文章,把本地git操作从头写了一遍,自己去看吧!•Git是一个免费、开源的、分布式版本控制系统•它使用一个特殊的叫做仓库的数据库来记录文件的变化•仓库中的每个文件都有一个完整的版本历史记录 2)工作流转 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。你的本地仓库由 git 维护的三棵"树"组成。工作目录:它持有实际文件;暂存区(Index):它像个缓存区域,临时保存你的改动;本地仓库(Respository):可以把本地仓库理解成一个

一口Linux的专栏 1447

【git系列】如何把别的分支的改动内容同步更新到自己的分支来?

3种方式把别的分支的改动内容同步更新到自己的分支来。

hwxiaozhi的博客 1万+

Git的工作区、暂存区、版本库及工作流程

Git的工作区、暂存区、版本库及工作流程。

Flyfreelylss的专栏 1327
上一篇: 滴滴工程师图文并茂带你深入理解 TCP 握手分手全过程
下一篇: 每个阿里程序员都必须搞懂的Maven基础知识
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值