21张图搞懂Git的原理

这篇具有很好参考价值的文章主要介绍了21张图搞懂Git的原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

21张图搞懂Git的原理,程序员,git

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

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

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

约定

==

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

21张图搞懂Git的原理,程序员,git

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

命令详解

====

Diff

====

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

21张图搞懂Git的原理,程序员,git

Commit

======

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

21张图搞懂Git的原理,程序员,git

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

21张图搞懂Git的原理,程序员,git

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

21张图搞懂Git的原理,程序员,git

另一个例子是分离HEAD提交,后文讲。

Checkout

========

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

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

21张图搞懂Git的原理,程序员,git

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

21张图搞懂Git的原理,程序员,git

如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像main~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout main。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。

21张图搞懂Git的原理,程序员,git

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

==================

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

21张图搞懂Git的原理,程序员,git

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

21张图搞懂Git的原理,程序员,git

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。21张图搞懂Git的原理,程序员,git

21张图搞懂Git的原理,程序员,git

21张图搞懂Git的原理,程序员,git

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

21张图搞懂Git的原理,程序员,git

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了PDF文档里

21张图搞懂Git的原理,程序员,git

21张图搞懂Git的原理,程序员,git

21张图搞懂Git的原理,程序员,git
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

[外链图片转存中…(img-kCWzdWJZ-1712086246303)]

[外链图片转存中…(img-kyBmb79A-1712086246304)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!文章来源地址https://www.toymoban.com/news/detail-851491.html

到了这里,关于21张图搞懂Git的原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 玩转Git: 程序员的日常手册

    Git是一个分布式版本控制系统,也是一个开源项目,最初为了帮助Linux内核开发。Git主要着重于数据完整性,数据的离散存储以及支持非线性开发,例如多个并行的散射分支。它具有超强的合并和分支操作。 在开始之前,我们需要首先在Git官方网站安装 Git。完成后,打开你的

    2024年02月04日
    浏览(31)
  • 程序员必备之——代码托管工具 git

    目录 一、git的安装及本地配置 1.1、git介绍 1.2、git本地安装及配置 1.3、git远程仓库 二、git的命令及使用 2.1、基础命令 三、git的分支 3.1、常用命令 3.2、执行效果图 3.3、合并时有冲突该怎么办? 3.4、解决冲突 3.5、git分支图解 四、连接远程仓库 4.1、在gitee新建远程仓库 4.2、

    2024年02月08日
    浏览(39)
  • 9个程序员必须掌握的Git命令

    介绍一些非常实用的Git命令。 微信搜索关注《Java学研大本营》 Git是最常用的版本控制系统之一。然而,对于初学者来说,Git的众多命令和工作流程会让人感到困惑和棘手。在Git的世界中很容易迷失,遇到合并冲突错误和意外更改,Git对于新手来说可能真的是一场噩梦。 本文

    2024年01月21日
    浏览(41)
  • Flink原理解析,Python程序员必看

    容错机制 ​ 分布式环境下的流式处理平台相对于批处理平台而言,一个非常重要的问题是如何 保证分布式计算节点在发生故障并恢复后最终的计算结果是正确的 。在批处理的模式下,数据有界,在任务开始前我们就可以得到需要计算的所有数据,如果节点出错,最坏的情况

    2024年04月09日
    浏览(52)
  • 程序员的20大Git面试问题及答案

    1.什么是Git? Git 是分布式版本控制系统(DVCS)。它可以跟踪文件的更改,并允许你恢复到任何特定版本的更改。 与 SVN 等其他版本控制系统(VCS)相比,其分布式架构具有许多优势,一个主要优点是它不依赖于中央服务器来存储项目文件的所有版本。 每个开发人员都可以“

    2024年02月04日
    浏览(45)
  • 黑马程序员-职工管理系统实战-附加源码Git

    职工管理系统可以用来管理公司内所有员工的信息 本教程主要利用C++来实现一个基于多态的职工管理系统 公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责 普通员工职责:完成经理交给的任务 经理职责:完成老

    2024年02月03日
    浏览(53)
  • 12个优秀GUI Git客户端,程序员必备!

    尽管许多用户可以从命令行轻松地使用Git,但有多种GUI客户端可以大大加快你的工作流程,尤其是在你不熟悉平台的情况下。 如果你正在寻找理想的客户端来管理你的Mac上的仓库,本文列出了适用于Mac OS X或Windows系统的最佳GUI Git客户端。 https://desktop.github.com/ GitHub Desktop是由

    2024年02月04日
    浏览(48)
  • 1024程序员节特辑:【Spring Boot自动配置原理揭秘】

    主页传送门:📀 传送   Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用程序的框架。它极大地简化了 Spring 应用程序的开发过程,其中一个关键的功能就是自动配置(Auto-Configuration)。   自动配置可以根据项目需求自动配置各种服务和组件,它可以帮助开发者

    2024年02月08日
    浏览(54)
  • 《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著

    答案有文档形式,但是csdn必须要下载,,需要的人就去那里下载吧。《MySQL数据库原理、设计与应用》课后习题及答案黑马程序员编著 一、 填空题 1.关系型数据库的标准语言是_ SQL _。 2.数据库发展的3个阶段中,数据独立性最高的是_ 数据库系统 _阶段。 3.概念模型中的3种基

    2024年02月03日
    浏览(39)
  • Android 动态分区详解(一) 5 张图让你搞懂动态分区原理

    本文主要包含动态分区的物理数据布局,内存核心数据结构和动态分区映射示例 3 个部分。 如果你对动态分区没啥概念,建议直接从头阅读 如果只关心动态分区在设备上是如何存储的,请跳转到第 3 节 如果只关心动态分区在内存中的数据结构,请跳转到第 4 节 如果想看动态

    2023年04月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包