动图展示10大Git命令,一目了然

一起学嵌入式 2024-02-23 08:08

扫描关注一起学嵌入式,一起学习,一起成长

git merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道这些 git 命令执行的究竟是什么任务吗?

如果你还有些分不清楚,那千万不能错过这篇文章。

在本文中,熟知 JavaScript、TypeScript、GraphQL、Serverless、AWS、Docker 和 Golang 的 21 岁年轻软件顾问 Lydia Hallie 通过动图形式直观地介绍了这些常用 git 命令的工作过程,包你过目不忘。

尽管 Git 是一款非常强大的工具,但如果我说 Git 用起来简直是噩梦,大多数人也会认同我的说法。
我发现在使用 Git 时,在头脑里可视化地想象它会非常有用:当我执行一个特定命令时,这些分支会如何交互,又会怎样影响历史记录?
为什么当我在 master 上执行硬重启,force push 到原分支以及 rimraf 我们的 .git 文件夹时,我的同事哭了?
我觉得创建一些最常用且最有用的 Git 命令的可视化示例会是一个完美的用例!
下面我将介绍的很多命令都有可选参数——你可以使用这些参数来改变对应命令的行为。而我的示例只会涵盖命令的默认行为,而不会添加(或添加太多)可选配置!
本文作者Lydia Hallie。
合并
拥有多个分支是很方便的,这样可以将不同的新修改互相隔离开,而且还能确保你不会意外地向生产代码推送未经许可或破损的代码修改。
但一旦这些修改得到了批准许可,我们就需要将其部署到我们的生产分支中!
可将一个分支的修改融入到另一个分支的一种方式是执行 git merge。Git 可执行两种类型的合并:fast-forward 和 no-fast-forward。
现在你可能分不清,但我们马上就来看看它们的差异所在。
Fast-forward (—ff)
在当前分支相比于我们要合并的分支没有额外的提交(commit)时,可以执行 fast-forward 合并。Git 很懒,首先会尝试执行最简单的选项:fast-forward!这类合并不会创建新的提交,而是会将我们正在合并的分支上的提交直接合并到当前分支。

完美!现在,我们在 dev 分支上所做的所有改变都合并到了 master 分支上。那么 no-fast-forward 又是什么意思呢?
No-fast-foward (—no-ff)
如果你的当前分支相比于你想要合并的分支没有任何提交,那当然很好,但很遗憾现实情况很少如此!如果我们在当前分支上提交我们想要合并的分支不具备的改变,那么 git 将会执行 no-fast-forward 合并。
使用 no-fast-forward 合并时,Git 会在当前活动分支上创建新的 merging commit。这个提交的父提交(parent commit)即指向这个活动分支,也指向我们想要合并的分支!

没什么大不了的,完美地合并!现在,我们在 dev 分支上所做的所有改变都合并到了 master 分支上。
合并冲突
尽管 Git 能够很好地决定如何合并分支以及如何向文件添加修改,但它并不总是能完全自己做决定。
当我们想要合并的两个分支的同一文件中的同一行代码上有不同的修改,或者一个分支删除了一个文件而另一个分支修改了这个文件时,Git 就不知道如何取舍了。
在这样的情况下,Git 会询问你想要保留哪种选择?假设在这两个分支中,我们都编辑了 README.md 的第一行。

如果我们想把 dev 合并到 master,就会出现一个合并冲突:你想要标题是 Hello! 还是 Hey!?
当尝试合并这些分支时,Git 会向你展示冲突出现的位置。我们可以手动移除我们不想保留的修改,保存这些修改,再次添加这个已修改的文件,然后提交这些修改。

完成!尽管合并冲突往往很让人厌烦,但这是合理的:Git 不应该瞎猜我们想要保留哪些修改。

变基(Rebasing)
我们刚看到可通过执行 git merge 将一个分支的修改应用到另一个分支。另一种可将一个分支的修改融入到另一个分支的方式是执行 git rebase。
git rebase 会将当前分支的提交复制到指定的分支之上。


完美,现在我们在 dev 分支上获取了 master 分支上的所有修改。
变基与合并有一个重大的区别:Git 不会尝试确定要保留或不保留哪些文件。我们执行 rebase 的分支总是含有我们想要保留的最新近的修改!
这样我们不会遇到任何合并冲突,而且可以保留一个漂亮的、线性的 Git 历史记录。
上面这个例子展示了在 master 分支上的变基。但是,在更大型的项目中,你通常不需要这样的操作。git rebase 在为复制的提交创建新的 hash 时会修改项目的历史记录。
如果你在开发一个 feature 分支并且 master 分支已经更新过,那么变基就很好用。你可以在你的分支上获取所有更新,这能防止未来出现合并冲突。
交互式变基(Interactive Rebase)
在为提交执行变基之前,我们可以修改它们!我们可以使用交互式变基来完成这一任务。交互式变基在你当前开发的分支上以及想要修改某些提交时会很有用。
在我们正在 rebase 的提交上,我们可以执行以下 6 个动作:
  • reword:修改提交信息;
  • edit:修改此提交;
  • squash:将提交融合到前一个提交中;
  • fixup:将提交融合到前一个提交中,不保留该提交的日志消息;
  • exec:在每个提交上运行我们想要 rebase 的命令;
  • drop:移除该提交。
很棒!这样我们就能完全控制我们的提交了。如果你想要移除一个提交,只需 drop 即可。

如果你想把多个提交融合到一起以便得到清晰的提交历史,那也没有问题!

交互式变基能为你在 rebase 时提供大量控制,甚至可以控制当前的活动分支。
重置(Resetting)
当我们不想要之前提交的修改时,就会用到这个命令。也许这是一个 WIP 提交或者可能是引入了 bug 的提交,这时候就要执行 git reset。

git reset 能让我们不再使用当前台面上的文件,让我们可以控制 HEAD 应该指向的位置。

软重置

软重置会将 HEAD 移至指定的提交(或与 HEAD 相比的提交的索引),而不会移除该提交之后加入的修改!

假设我们不想保留添加了一个 style.css 文件的提交 9e78i,而且我们也不想保留添加了一个 index.js 文件的提交 035cc。但是,我们确实又想要保留新添加的 style.css 和 index.js 文件!这是软重置的一个完美用例。

输入 git status 后,你会看到我们仍然可以访问在之前的提交上做过的所有修改。这很好,这意味着我们可以修复这些文件的内容,之后再重新提交它们!

硬重置

有时候我们并不想保留特定提交引入的修改。不同于软重置,我们应该再也无需访问它们。Git 应该直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改。

Git 丢弃了 9e78i 和 035cc 引入的修改,并将状态重置到了 ec5be 的状态。

还原(Reverting)
另一种撤销修改的方法是执行 git revert。通过对特定的提交执行还原操作,我们会创建一个包含已还原修改的新提交。

假设 ec5be 添加了一个 index.js 文件。但之后我们发现其实我们再也不需要由这个提交引入的修改了。那就还原 ec5be 提交吧!

完美!提交 9e78i 还原了由提交 ec5be 引入的修改。在撤销特定的提交时,git revert 非常有用,同时也不会修改分支的历史。
拣选(Cherry-picking)
当一个特定分支包含我们的活动分支需要的某个提交时,我们对那个提交执行 cherry-pick!对一个提交执行 cherry-pick 时,我们会在活动分支上创建一个新的提交,其中包含由拣选出来的提交所引入的修改。
假设 dev 分支上的提交 76d12 为 index.js 文件添加了一项修改,而我们希望将其整合到 master 分支中。我们并不想要整个 dev 分支,而只需要这个提交!

现在 master 分支包含 76d12 引入的修改了。
取回(Fetching)
如果你有一个远程 Git 分支,比如在 GitHub 上的分支,当远程分支上包含当前分支没有的提交时,可以使用取回。比如当合并了另一个分支或你的同事推送了一个快速修复时。

通过在这个远程分支上执行 git fetch,我们就可在本地获取这些修改。这不会以任何方式影响你的本地分支:fetch 只是单纯地下载新的数据而已。

现在我们可以看到自上次推送以来的所有修改了。这些新数据也已经在本地了,我们可以决定用这些新数据做什么了。
拉取(Pulling)
尽管 git fetch 可用于获取某个分支的远程信息,但我们也可以执行 git pull。git pull 实际上是两个命令合成了一个:git fetch 和 git merge。
当我们从来源拉取修改时,我们首先是像 git fetch 那样取回所有数据,然后最新的修改会自动合并到本地分支中。

很好,我们现在与远程分支完美同步了,并且也有了所有最新的修改!
Reflog
每个人都会犯错,但犯错其实没啥!有时候你可能感觉你把 git repo 完全搞坏了,让你想完全删除了事。

git reflog 是一个非常有用的命令,可以展示已经执行过的所有动作的日志。包括合并、重置、还原,基本上包含你对你的分支所做的任何修改。

如果你犯了错,你可以根据 reflog 提供的信息通过重置 HEAD 来轻松地重做!
假设我们实际上并不需要合并原有分支。当我们执行 git reflog 命令时,我们可以看到这个 repo 的状态在合并前位于 HEAD@{1}。那我们就执行一次 git reset,将 HEAD 重新指向在 HEAD@{1} 的位置。

我们可以看到最新的动作已被推送给 reflog。

直接来源:机器之心

原文:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1

文章来源于网络,版权归原作者所有,如有侵权,请联系删除。



关注【一起学嵌入式】,回复加群进技术交流群。



觉得文章不错,点击“分享”、“”、“在看” 呗!

一起学嵌入式 公众号【一起学嵌入式】,RTOS、Linux编程、C/C++,以及经验分享、行业资讯、物联网等技术知
评论 (0)
  • 摘要      随着汽车行业转变为数据驱动的业务,软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加,相应的网络安全风险、责任和监管也随之增加,传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加的风险。      一种解决这一问题的新方法被提出了——为ECU软件构建一个数字孪生副本,以持续监测其处在网络安全风险环境下中的情况。使用这种方法,供应商可以充分了解网络安全风险,同时既可以用于运营中的
    经纬恒润 2024-04-22 16:16 196浏览
  • 这套方案最大的特点就是低成本,也许是目前市面上性价比最高的HDMI 百兆 IP延长方案了,废话不多说,直接进入功能及参数介绍环节: 1、可过百兆或千兆交换机,支持1对1,1对多和多对多; 2、支持KVM(键鼠)、IR(红外遥控)和环出; 3、最大传输距离:150米,支持CAT5e(5类)和CAT6(6类)网线; 4、延迟:90-100毫秒; 5、压缩编码方式:H.264; 6、分辨率支持:最大1920*1080P@60Hz,向下兼容。相对于炬力北方(Actions)最早推出的HDMI百兆IP延长
    深圳东影智联 2024-04-22 09:51 327浏览
  • 艾瑞泽5的网关接口数据交换通常涉及车辆内部电子设备之间的信息传输,包括车身系统、娱乐系统、远程控制、车辆状态监控、CAN数据采集分析、整车DBC控制策略等信息。艾瑞泽5作为一款采用CAN协议的汽车,其CAN通信的开发可以提高车辆的安全性、可靠性和实时性。CAN协议是一种用于汽车内部通信的网络协议,它允许车辆内不同设备之间进行数据交换,从而为驾驶员提供更好的驾驶体验。 速锐得开发艾瑞泽5 CAN通信总结了一些关键点:作为驾校、公务用车管理、数据采集项目上,客户和技师都必须了解CAN协议:
    lauguo2013 2024-04-22 10:55 314浏览
  • 科技云报道原创。超融合作为一种云时代的IT基础架构,诞生已有十余年,如今已是一种非常成熟且主流的应用。多年的技术发展和市场需求的快速增长,让超融合成了一个非常“卷”的市场,云服务商、HCI创业公司、综合IT供应商,甚至运营商、安全公司等跨界供应商都广泛参与其中。如此“卷”的中国超融合市场,给行业用户们带来的变化是非常明显的:一方面,超融合“计算存储网络资源池”的概念已烂熟于心,市场接受度逐步达到顶峰;另一方面,超融合产品同质化严重,在选型时容易陷入“乱花渐欲迷人眼”。但值得注意的是,在云原生、A
    科技云报到 2024-04-22 18:06 58浏览
  • 本视频来自凤凰卫视《世纪大讲堂》,演讲人是中国工程院院士、中国仪器仪表学会理事长尤政院士,主题是《传感器:亟待攻克的关键“卡脖子”技术》。尤政院士是中国传感器与微米纳米技术著名专家,本视频基于其深厚的专业素养,同时深入浅出,向我国大众科普传感器知识,提到中国传感器产业一些比较尖锐的问题,向许多甚少了解我国科技发展情况的朋友,阐述了我国传感器产业面临的情况。强烈推荐!专家档案尤政 ,中国工程院院士,华中科技大学校长,中国仪器仪表学会第十届理事长,中国微米纳米技术学会理事长,主要研究方向为微米纳米技
    传感器专家网 2024-04-23 10:09 35浏览
  • 【一文秒懂】Linux ADB调试环境搭建指南1、ADB介绍ADB:Android Debug Bridge,安卓调试桥,是用的最多的一种命令行工具,它能够在电脑端和安卓支持的设备端进行通信,其通信方式有两种:USB或者TCP/IP。它能够支持多种设备端的操作,包括:网络,脚本,安装和调试应用,文件传输等,同时也支持访问unix shell。adb命令行工具,随着安卓SDK平台工具一起发布,是安卓SDK的一个组件。 2、ADB架构及组成它是一个C/S(client-server)架构的
    _嵌入式艺术_ 2024-04-23 07:52 80浏览
  • 科技云报道原创。在最新的存储市场动态中,存储芯片大厂的减产策略显现出其效果,特别是在DDR内存领域。根据台湾工商时报的最新报道,第四季度的内存芯片合约价格出现了超出预期的上涨。这一价格变动尤其在DDR5芯片上表现突出,其价格上涨幅度达到了15-20%,而DDR4和DDR3的涨幅分别为10-15%和10%。这些数字远高于原先预估的5-10%的涨幅。在这背后是三星、SK海力士等国际存储器大厂的减产行动,以及美光计划持续减产至2024年。业界普遍预期,在供给减少的同时,人工智能、服务器等领域的需求增长
    科技云报到 2024-04-22 17:13 266浏览
  • STC89C52RC比普通89C52多了后缀“RC”,虽然它们都是单片机芯片,但是带有“RC”字样的单片机自带RC时钟振荡电路(有的频率可调有的频率不可调),可以在不接外部晶振就能使用,没有带“RC”这个字样的芯片一般必须安装外部晶振电路。STC89C52RC是宏晶公司的增强型MCS-51单片机,与Atmel公司的AT89C52相比,有以下优点:支持STC的2线制下载方式,下载程序更方便;支持6T模式(在6T模式下,6个时钟周期就是一个机器周期);片内集成了4kB容量的E²PROM;带有P4口,
    丙丁先生 2024-04-23 10:39 27浏览
  • 技术突围,要选择优势充分发挥领域,比如动力电池加工,比如激光雕刻。2月7日,根据韩国研究机构SNE Research发布的最新数据显示,2023年全年,全球登记的电动汽车(EV、PHEV、HEV)动力电池装车量约为705.5GWh,同比增长38.6%。动力电池市场的飞速发展,也将用于激光焊接的蓝色激光再次推向了聚光灯下。1、动力电池加工,前景广阔以动力电池焊接为例,焊接质量的决定因素除焊接工艺外,在于激光器选型,例如针对铜材料焊接的蓝光激光器应用。“传统的红外光纤激光器在加工电池时会因为焊接出现
    艾迈斯欧司朗 2024-04-22 17:05 228浏览
  • 科技云报道原创。没有小的市场,只有还没有被发现的大生意。随着企业数字化转型的逐级深入,市场需求进一步向PaaS和SaaS层进发,使之成为公有云服务市场增长的主要动力。根据IDC最新发布的报告显示,2022-2027五年间中国公有云市场年复合增长率将达到26.9%,其中PaaS(平台即服务)增速最快,为30.5%,SaaS(软件即服务)紧随其后为28.7%。当云计算的基础设施建设完成后,中国公有云市场正在从资源驱动型延伸至技术和业务驱动。与此同时,生成式AI和大模型的快速发展,也在加速推动PaaS
    科技云报到 2024-04-22 17:24 241浏览
  • 配图来自Canva可画AI和服装,这两个看似不相干的领域摩擦出了不一样的火花。过去几年,国潮风口带动了汉服、马面裙、旗袍等等不少“新中式”服装的兴盛,有的商家借此契机赚了个盆满钵满,也有的商家苦于追不上风口。以马面裙为例,得益于“新中式”风潮的兴起,马面裙销量不断上涨,市场规模呈持续扩大趋势。根据魔镜洞察统计,2023年3月至2024年2月,马面裙的线上市场规模达到了23.5亿元,同比增长503.1%。风口之上,许多嗅觉敏锐的服装企业开始切入马面裙赛道。仅仅一个曹县,马面裙企业就有1500家左右
    刘旷 2024-04-22 10:50 340浏览
  • DIP(Dual In-line Package)封装是一种经典的集成电路封装形式,特点是两排平行的引脚沿封装体的长边伸出。引脚通常是通过穿孔安装在印刷电路板(PCB)上,并通过焊接固定。DIP封装在电子行业中已有多年历史,尽管表面贴装技术(SMT)的发展使得其使用率有所下降,但在某些应用中仍然广受欢迎,特别是在教育、原型制作、小批量生产和爱好者市场中。DIP封装简介:结构:DIP封装的引脚沿着长方体封装的两长边排列,通常对称分布,形成两行。引脚的间距(引脚间距)通常为0.1英寸(2.54毫米)
    大鱼芯城 2024-04-22 09:46 105浏览
  • 你是否考虑过,企业网络上所用到的每台设备,小到电脑、平板、电话、路由器,大到打印机、服务器,都可能潜藏网络安全风险,威胁企业的信息安全和业务?部门企业的业务开展所赖以支撑的物联网设备或者电子邮件,则更可能挑战企业的网络安全。随着数字化转型的加速,企业应当怎样进行全面的网络安全风险分析,才能有效避免这些风险?一、什么是风险分析?风险分析指的是识别、审查和分析可能对企业造成负面影响的现有或潜在网络安全风险的过程,对于识别、管理和保护可能受到网络攻击的数据、信息和资产而言至关重要。通过网络安全风险分析
    虹科网络可视化 2024-04-22 14:17 234浏览
  • 前言在汽车与自动化行业,基于模型的开发过程中,从业者希望能够在保证建模效率的同时确保模型质量。此时,合理使用建模工具变得尤为重要。合适的工具不仅能够通过建模规范检查分析测试模型的质量,还能根据分析结果对模型进行自动改进。本篇文章为您介绍广受业界认可的静态测试工具MES Model Examiner® (MXAM) 。从MXAM在静态测试中的应用角色到实际演示与10.0版本功能更新,本文带您透彻了解MXAM如何能轻松帮助您实现优质建模。基于模型的开发中静态测试的应用与MXAMMXAM是用于对Sim
    MESMarketing 2024-04-20 18:03 90浏览
  • 科技云报道原创。随着以大模型为代表的AIGC时代拉开序幕,算力需求持续爆发,AI与边缘深度融合已是大势所趋,越来越多的企业开始积极布局GenAI。GenAI技术的商用化部署和应用成为企业竞逐的新阵地,勾勒出大模型从“技术力”转向“生产力”的新生态。算力就是生产力,更丰富的算力资源成为人工智能竞争的核心基石。IDC预计,全球AI计算市场规模将从2022年的195亿美元增长到2026年的346.6亿美元,其中GenAI计算市场规模将从2022年的8.2亿美元增长到2026年的109.9亿美元。Gen
    科技云报到 2024-04-22 15:11 231浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦