15张图解析 Git 各种用法,一目了然!

Git的使用(易懂+巨无比详细+新手必看) Git是用来干什么的呢?是用来管理代码文件的,具体是啥自行百度就行,其实你点进来你多少会对他有点了解,知道他是干嘛的~ 阅读详情

来源:网络素材

基本用法

上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。

  • git add *files* 把当前文件放入暂存区域。

  • git commit 给暂存区域生成快照并提交。

  • git reset -- *files* 用来撤销最后一次git add *files*,你也可以用git reset 撤销所有暂存区域文件。

  • git checkout -- *files* 把文件从暂存区域复制到工作目录,用来丢弃本地修改。

你可以用 git reset -p, git checkout -p, or git add -p进入交互模式。

也可以跳过暂存区域直接从仓库取出文件或者直接提交代码。

img
  • git commit -a相当于运行 git add 把所有当前目录下的文件加入暂存区域再运行。git commit.

  • git commit *files* 进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。

  • git checkout HEAD -- *files* 回滚到复制最后一次提交。

约定

后文中以下面的形式使用图片。

绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。main分支指向此次提交,另一个stable分支指向祖父提交节点。

命令详解

Diff

有许多种方法查看两次提交之间的变动。下面是一些示例。

Commit

提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是main。在运行命令之前,main指向ed489,提交后,main指向新的节点f0cec并以ed489作为父节点。

即便当前分支是某次提交的祖父节点,git会同样操作。下图中,在main分支的祖父节点stable分支进行一次提交,生成了1800b。这样,stable分支就不再是main分支的祖父节点。此时,合并 (或者 衍合) 是必须的。

如果想更改一次提交,使用 git commit --amend。git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。

另一个例子是分离HEAD提交,后文讲。另外,Git 系列面试题整理好了,微信搜索Java技术栈,在后台发送:面试,面试题非常全。

Checkout

checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。

当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,git会从指定的提交中拷贝文件到暂存区域和工作目录。比如,git checkout HEAD~ foo.c会将提交节点HEAD~(即当前提交节点的父节点)中的foo.c复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)注意当前分支不会发生变化。

当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被忽略,不受影响。

如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像main~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。

这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout main。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。

HEAD标识处于分离状态时的提交操作

当HEAD处于分离状态(不依附于任一分支)时,提交操作可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。)

一旦此后你切换到别的分支,比如说main,那么这个提交节点(可能)再也不会被引用到,然后就会被丢弃掉了。注意这个命令之后就不会有东西引用2eecb。分享给你:Spring Boot 学习笔记。

但是,如果你想保存这个状态,可以用命令git checkout -b *name*来创建一个新的分支。

Reset

reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。

如果不给选项,那么当前分支指向到那个提交。如果用--hard选项,那么工作目录也更新,如果用--soft选项,那么都不变。

如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用--hard选项,工作目录也同样。

如果给了文件名(或者 -p选项), 那么工作效果和带文件名的checkout差不多,除了索引被更新。Java 核心技术教程和示例源码:https://github.com/javastacks/javastack

Merge

merge 命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。

否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。

Cherry Pick

cherry-pick命令"复制"一个提交节点并在当前分支做一次完全一样的新提交。

Rebase

衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。本质上,这是线性化的自动的 cherry-pick

上面的命令都在topic分支中进行,而不是main分支,在main分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。

要限制回滚范围,使用--onto选项。下面的命令在main分支上重演当前分支从169a6以来的最近几个提交,即2c33a。

同样有git rebase --interactive让你更方便的完成一些复杂操作,比如丢弃、重排、修改、合并提交。

技术说明

文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。

如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit --amend或者git rebase很像。

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

21张图搞懂Git的原理 比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout main。当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。下图中,当前分支是main。上面的命令都在topic分支中进行,而不是main分支,在main分支上重演,并且把分支指向新的节点。 阅读详情

相关推荐

15个Git核心命令

本文深入解析15个核心Git命令,帮助开发者提升协作效率。从基础操作(git init、clone、add、commit)到团队协作技巧(branch、merge、pull),再到高级应用(stash、revert、remote),每个命令都配有实战案例和深度建议。特别强调提交信息的规范性、分支管理策略和冲突解决技巧,并指出Git不仅是工具,更是管理复杂性的思维方式。掌握这些命令能有效应对日常开发中的版本控制挑战。

wldtzzming的专栏 445

【git篇】git的使用

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。集中式(SVN) VS 分布式(git)集中式版本控制系统,版本库是集中存放在中央服务器的,工作时要先从中央服务器取得最新的版本,完成工作后,再把自己的文件推送给中央服务器。集中式版本控制系统在工作时需要联网。分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,所以就不需要联网。

weixin_45842494的博客 3万+

10、Git 提交历史与图的深入解析

本文深入解析了 Git 的提交历史与提交图,详细介绍了多根提交、相对提交命名、查看提交历史的常用命令(如 git log 和 git show-branch)、日志格式化选项、提交图的结构与可视化,以及使用 gitk 进行图形化查看的方法。文章还探讨了提交图在分支管理、问题排查和版本控制中的实际应用场景,并通过示例说明了如何简化提交图以提高可读性。适合希望深入理解 Git 提交机制和历史查看功能的开发者阅读。

j0k1l2m3n的博客 223

Git基本使用(很详细)

详细的git教程,一直到连接远程仓库

qq_45796592的博客 15万+

10xGenomics Loupe Browser实战指南:从数据导入到细胞注释全流程解析

本文提供了10xGenomics Loupe Browser的实战指南,详细解析了从数据导入到细胞注释的全流程。作为一款强大的可视化工具,Loupe Browser能帮助研究者直观探索单细胞测序数据,通过交互式操作进行细胞选择、差异基因分析和细胞类型注释,是单细胞数据分析入门和结果验证的高效平台。

blue42的博客 453

PC微信逆向) 读取内存联系人链表

首先从一些网络上搜索到的信息可以得出联系人列表是保存在内存里的,并且是全局变量不会被释放,所以我们可以通过搜索某个联系人的信息来定位

Qwertyuiop2016的博客 2919

git的了解和开发安装 以及分支合集

git的了解和开发安装 以及分支合集

qq_38806666的博客 1341

为什么你的SSE连接总断?深入对比EventSource与fetch-event-source的5大差异点

本文深入对比了原生EventSource与@microsoft/fetch-event-source库在SSE连接稳定性上的五大关键差异。重点剖析了后者在请求能力、连接控制、错误处理、数据解析及性能优化方面的优势,特别是其支持POST请求、自定义Header、精细化的重连策略与生命周期管理,为解决生产环境中SSE连接频繁断开的问题提供了专业方案。

weixin_28077113的博客 494

Git使用详细教程

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

weixin_30663391的博客 2万+

[arcgis插件]在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面

在批量出图时,如何把图层属性表以动态表格的形式插入到布局页面。

坐听风雨 4562

【Dify】知识库智能检索应用

本文介绍了一个基于大语言模型的知识库检索系统,实现从自然语言提问到智能回答的自动化流程。该系统通过知识检索节点定位相关信息,利用重排序模型优化结果,最后由大语言模型生成自然语言答案。核心模型包括InternLM2-7B和BCE重排序模型。工作流程包含输入问题、检索重排序、智能生成和答案输出四个阶段,适用于企业知识管理、客户支持、教育培训等多种场景,能显著提升信息检索效率和准确性。文章还提供了相关开发文档链接,涵盖AIGC工具平台搭建、常见问题解决等内容。

Mr数据杨 1000

图解 Git,一目了然!

上一篇:深夜看了张一鸣的微博,让我越想越后怕来源:marklodato.github.io/visual-git-guide/index-zh-cn.html基本用法上面的四条命令在工作目...

emprere的博客 189

ROS2入门到精通—— ROS2实战专栏(实时更新)

Nav2专栏介绍

BigDavid123的博客 2367

图解 Git 各种用法,简单明了,一目了然!

点击上方前端Q,关注公众号回复加群,加入前端Q技术交流群来源:marklodato.github.io/visual-git-guide/index-zh-cn.html基本用法上面的四...

LuckyWinty的博客 308

【HALCON工业视觉应用探索】10. C#+Halcon 3D视觉实战:点云处理与三维测量工业指南(附完整代码与实操案例)

摘要:本文聚焦C#+Halcon在3D视觉领域的工业应用,从新手友好的“基础3D检测系统”切入,逐步深入“汽车铸件三维测量”等工业级场景。内容涵盖核心概念(点云数据结构、3D采集原理、坐标系统)、完整技术流程(数据采集→预处理→特征提取→三维测量→结果可视化)、工业级代码实现(多视角点云融合、微缺陷检测、高精度尺寸测量),以及现场落地关键技巧(硬件选型、标定流程、抗干扰优化)。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2004

优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信

优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信今天开始会陆续介绍一些优秀的开源项目,项目基本都是和FPGA或HDL相关的。对于一些找工作或者急需项目经验的人来说,这些项目...

OpenFPGA的博客 8117

用21张图,把Git 工作原理彻底说清楚

本文图解Git中的最常用命令。如果你稍微理解Git的工作原理,这篇文章能够让你理解的更透彻。 基本用法上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。git add ...

weixin_45727359的博客 248

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hello-Git新版亮点:90张高清书籍截图资源全解析

hello-git项目最新版本带来了一项重磅更新——**90张高清书籍截图资源**,为学习Git和GitHub的开发者提供了前所未有的视觉学习体验。这些精心制作的截图涵盖了从Git基础概念到GitHub高级协作的完整学习路径,是初学者快速掌握版本控制技能的终极资源库。 ## 📚 完整的学习资源体系 hello-git项目现在包含了**Media/Book screenshots**目录下的9

gitblog_07637的博客 513

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

15个Git核心命令全解析:从分支合并到回滚实战

版本控制是现代软件开发的基石,Git作为分布式版本控制系统的代表,通过工作区、暂存区和版本库三个核心区域,构建了一套灵活高效的代码管理模型。理解这一底层原理,是掌握一切Git操作的关键。在实际工程中,无论是个人项目归档,还是团队协作开发,都离不开分支创建、代码合并、冲突处理、远程同步和版本回滚等高频操作。面对合并冲突时的慌乱、误提交后的懊悔,往往源于对核心命令的掌握不够扎实。本文精选15个必备Git命令,围绕一条贯穿项目演进的主线,深入浅出地讲解每个命令的适用场景与操作细节,帮助读者真正建立命令行下的版本控

weixin_31061699的博客 348

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

git config 用法

也许当初你匆匆而过,早已经忘记了在何时何地配置过你的用户名和邮箱地址,但这却是使用 git 最初的一件事,形如: $ git config --global user.name "Your Name" $ git config --global user.email "youremail@address.com" 初次遇见两段如此长的命令行,我敢打赌你也是像我一样记不住的。接下来我们通过下面的学...

bluebird_shao的专栏 2416

Git Stash深度解析:临时保存和恢复工作状态的15种方法

Git Stash是Git版本控制系统中一个极其强大的功能,它允许开发者临时保存当前的工作状态,以便在需要时可以快速恢复到之前的工作进度。无论你是需要切换分支、处理紧急bug还是只是想清理工作区,Git Stash都能为你提供完美的解决方案。本文将深入解析Git Stash的15种实用方法,帮助你掌握这个强大的Git工具。 ## 🔥 什么是Git Stash? Git Stash是一个临时存

gitblog_00588的博客 927

关于Git这一篇就够了

目录 前言 发展过程 集中式与分布式的区别 Debian/Linux安装Git 配置git环境:git config --global 创建本地空仓库:git init 新建文件添加到本地仓库:git add、git commit -m 改写提交:git commit --amend 查看历史提交日志:git log 回滚代码仓库:git reset --hard 查看提交之后文件是否做了改动:git status 工作区与缓存区 修改缓存区内容:git add、git co.

17岁boy的博客 53万+

Bandage 图布局算法探秘:OGDF 如何让复杂组装图一目了然

对于做基因组组装的研究者来说,**Bandage** 早已是耳熟能详的**组装图可视化**工具:它能把 Velvet、SPAdes、MEGAHIT 等组装器产生的 de novo 组装图,从晦涩的文本文件变成可交互、可缩放的图形界面。但你有没有想过,那些密密麻麻的 contig 节点和连线,是如何被自动摆放得整齐美观的?答案藏在 **Bandage 图布局算法**之中——它基于开源图算法库 **O

gitblog_00794的博客 465

GIT命令用法讲解

GIT工作方式 在文件夹中创建git工作区,工作区的文件保存到缓存区,缓存区的文件在上传到Git仓库,作为提交记录。 使用命令 git status git add 001.py git commit -m “版本1” 常用命令讲解 mkdir Git_Text 创建工作文件夹 git init 初始化文件夹 git add test.txt 添加工作code git commit -...

成都_杨洋 325

直接使用git pull拉取代码,被同事狠狠地diss了!

简单来说,rebase的作用就是永远会让我们本地的代码处于最新状态。比如,我们一开始是使用B节点开发代码的,开发到B2时,此时远程已经有人推送了C节点。在B2节点使用rebase变基,会让我们的B1节点和B2节点位于C节点上。大概是这样:因此,使用rebase变基后,git永远只有一条线性历史,非常直观。本篇文章我们介绍了git pull的用法,明白了它有merge和rebase两种模式。默认情况下,它使用的是merge。使用merge的方式拉取代码会导致git历史变得复杂,不利于维护和溯源。

chuyouyinghe的专栏 1万+

Git常见操作

本文介绍git的常见用法

QQVQQ的博客 2468
上一篇: FPGA上板调试方式总结
下一篇: 综述:图像滤波常用算法实现及原理解析
Hack电子
博客等级 码龄5年 1469粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值