虚拟项目学习git/github原理与基本操作10

[Github项目安装]基于深度学习的原神自动钓鱼实现记录 基于深度学习的原神自动钓鱼实现记录与环境搭建bug解决方案 阅读详情

衍合

把一个分支整合到另一个分支的办法有两种:merge(合并) 和 rebase(衍合)。在本章我们会学习什么是衍合,如何使用衍合,为什么衍合操作如此富有魅力,以及我们应该在什么情况下使用衍合。


简单的说衍合就是把当前的分支的变化在另外的一个分支上重演一次。

在我们以前的项目的基础上,把 master分支向前推进两步。

因为我在自己练习的时候已经将featurex1分支在master分支上做了一次rebase,所以目前的featurex1分支和master分支在统一条线上。

为了更清楚的表示,我们这里在featurex1分支的基础上再拉出一个分支叫做featurex1_issue1,然后将分支推进两步。


这个时候,master 分支在前面的基础上前进了两步,featurex1_issue1分支也前进了两步,可以让featurex1_issue1在master分支上做rebase.

为什么需要对有些分支做rebase 呢?

最后整合得到的结果没有任何区别,但衍合能产生一个更为整洁的提交历史。

rebase 以后能够得到更加简洁的提交历史。


而且要特别强调,rebase以后,原来的分支就不再了,而是顺着在哪个分支做的rebase继续沿着那个分支顺延下去。。。。这点要特别明确,所以新生成的合并的分支会看起来比较简洁。而且,当一个分支在master分支上做了rebase,这个分支的版本要超过master指针指向的文件快照,还要合并mastter分支和这个新的衍合后的分支,master分支就可以指向最新的整合的分支了。因为两个分支存在一个分支的指针是另一个分支的祖先,所以可以实现fast-forward

watkins@watkins:~/watkins/finance$ git checkout featurex1_issue1 
Switched to branch 'featurex1_issue1'
watkins@watkins:~/watkins/finance$ gitk
watkins@watkins:~/watkins/finance$ git rebase master 
First, rewinding head to replay your work on top of it...
Applying: issue2_1
Applying: issue2_2
watkins@watkins:~/watkins/finance$ git checkout master 
Switched to branch 'master'
watkins@watkins:~/watkins/finance$ gitk
watkins@watkins:~/watkins/finance$ git merge featurex1_issue1 
Updating 1139a2e..baaf2e4
Fast-forward
 funciton3 |    3 +++
 1 file changed, 3 insertions(+)
watkins@watkins:~/watkins/finance$ 



衍合基础

请回顾之前有关合并的一节(见图 3-27),你会看到开发进程分叉到两个不同分支,又各自提交了更新。


图 3-27. 最初分叉的提交历史。

之前介绍过,最容易的整合分支的方法是 merge 命令,它会把两个分支最新的快照(C3 和 C4)以及二者最新的共同祖先(C2)进行三方合并。如图 3-28 所示:


图 3-28. 通过合并一个分支来整合分叉了的历史。

其实,还有另外一个选择:你可以把在 C3 里产生的变化补丁重新在 C4 的基础上打一遍。在 Git 里,这种操作叫做_衍合(rebase)_。有了 rebase 命令,就可以把在一个分支里提交的改变在另一个分支里重放一遍。

在这个例子里,可以运行下面的命令:

$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command

它的原理是回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。图 3-29 演示了这一过程:


图 3-29. 把 C3 里产生的改变衍合到 C4 中。

现在,你可以回到 master 分支然后进行一次快进合并(见图 3-30):


图 3-30. master 分支的快进。

现在,合并后的 C3(即现在的 C3’)所指的快照,同三方合并例子中的 C5 所指的快照内容一模一样了。最后整合得到的结果没有任何区别,但衍合能产生一个更为整洁的提交历史。如果视察一个衍合过的分支的历史记录,看起来更清楚:仿佛所有修改都是先后进行的,尽管实际上它们原来是同时发生的。

你可以经常使用衍合,确保在远程分支里的提交历史更清晰。比方说,某些项目自己不是维护者,但想帮点忙,就应该尽可能使用衍合:先在一个分支里进行开发,当准备向主项目提交补丁的时候,再把它衍合到origin/master 里面。这样,维护者就不需要做任何整合工作,只需根据你提供的仓库地址作一次快进,或者采纳你提交的补丁。

请注意,合并结果中最后一次提交所指向的快照,无论是通过一次衍合还是一次三方合并,都是同样的快照内容,只是提交的历史不同罢了。衍合按照每行改变发生的次序重演发生的改变,而合并是把最终结果合在一起。

衍合的风险

呃,奇妙的衍合也不是完美无缺的,一句话可以总结这点:

永远不要衍合那些已经推送到公共仓库的更新。


GitHub高效学习Python:从开源项目到实战技能提升 开源项目是现代编程学习的重要资源,通过阅读真实代码理解编程原理是提升开发能力的有效途径。GitHub作为全球最大的代码托管平台,汇聚了海量Python项目资源,为学习者提供了从基础语法到高级应用的完整学习路径。在软件工程实践中,通过参与开源项目可以学习企业级开发规范,掌握版本控制、代码审查等核心技能。对于Python开发者而言,GitHub不仅是代码仓库,更是技术社区和实战训练场。本文基于Python学习和开源协作的热点需求,详细介绍如何利用GitHub上的优质资源,包括cpython源码、requests 阅读详情

相关推荐

GitHub实战学习法:Python编程从理论到项目的完整指南

Python作为当前最流行的编程语言之一,其学习路径往往面临理论与实践脱节的挑战。传统的语法学习模式虽然能掌握基础概念,但缺乏真实项目场景的支撑。GitHub作为全球最大的代码托管平台,提供了从概念理解到工程实践的无缝衔接。通过观察成熟项目的代码组织方式、学习专业的错误处理机制和项目架构设计,开发者能够建立完整的编程思维体系。这种基于真实代码库的学习方法,特别适合解决Python初学者在项目经验积累和代码质量提升方面的痛点。GitHub上的活跃项目社区和丰富的学习资源,为Python技能从入门到精通提供了可

weixin_34335458的博客 380

github代码复现/github项目部署/Github项目环境配置/跑通github项目/python机器学习跑通

github代码复现/github项目部署/Github项目环境配置/跑通github项目/python机器学习跑通。

2501_90824910的博客 2324

深入理解Git与GitHub:原理与实战指南

在软件开发的历史长河中,版本控制系统经历了从集中式向分布式的发展。最初,开发者们依赖于简单的文件备份和手动合并来跟踪代码变更。这种方法很快暴露出诸多问题,例如版本冲突、历史记录丢失、多人协作困难等。集中式版本控制系统(CVCS),如CVS和Subversion,试图解决这些问题,将所有代码维护在单一的服务器上。尽管这种集中式的做法提高了团队协作的效率,但其缺点也显而易见。任何对服务器的依赖都可能成为单点故障,一旦服务器发生故障,整个开发进程将被迫停滞。

weixin_28888459的博客 991

虚拟项目学习git/github原理与基本操作2

假设我们的虚拟项目是某财务系统,计算某个公司的纳税额等信息。 先在github中创建一个这个项目的repo, 命名为finance. 创建好这个repo以后,github给出了一些基本的命令如下: Create a new repository on the command line touch README.md git init git add README.md git commit

Work Hard, Play Harder! 2219

AI算力网络与通信领域流量分析:优化策略探讨_副本

今天的AI就像一个"超级吃货",每天要"吃"掉海量数据、“消耗"巨量算力——训练一个千亿参数的大模型,可能需要上万块GPU同时工作数周,其间产生的数据传输量足以填满数百万个1TB硬盘。这些GPU和计算节点通过网络连接形成"AI算力网络”,而数据在节点间的流动就是"通信流量"。如果把算力比作AI的"肌肉",那流量就是"血液"——血液不通畅,肌肉再强也使不上劲。

AI天才研究院 1198

5步搞定ABB机器人RobotStudio与S7-1500PLC的Profinet通讯(附PLCSIM调试技巧)

本文详细介绍了如何利用RobotStudio与TIA Portal软件,结合PLCSIM Advanced仿真器,在零硬件条件下实现ABB机器人与西门子S7-1500 PLC之间的Profinet通讯虚拟调试。通过五个核心步骤,从环境搭建、网络配置、信号映射到联合仿真与高级调试,帮助工程师在项目前期高效验证逻辑、压缩现场调试周期,并掌握实用的PLCSIM调试技巧。

weixin_29188043的博客 505

虚拟项目学习git/github原理与基本操作7

项目的分支管理 Git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。在若干次提交后,你其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。 如果你没有指定当前的分支的名字,git会自动的使用master作为当前的分支的名字,并且有个指针指向当前的工作的分支,每次提交项目

Work Hard, Play Harder! 1533

Mathtype公式下标深度调整技巧:解决固定行距下的显示不全问题

本文针对在Word等文档中设置固定行距时,Mathtype公式下标显示不全的问题,提供了专业解决方案。核心在于调整Mathtype软件内部的“下标深度”参数,通过修改单个公式或批量格式化全文,使公式完美适配固定行距,确保下标清晰完整,且不影响文档整体排版。

pepsi的博客 1498

虚拟项目学习git/github原理与基本操作1

本人为了更好的学习git的基本操作,利用github给提供的良好的服务,通过一个虚拟项目来熟练git的基本操作与原理。 1. Git基础知识 在git中每一次版本信息都是对所有文件的一次快照,保存了指向这个快照的索引。 对于任何一个文件,git内部只有三种状态,已提交(committed),已修改(modified)和已暂存(staged). 已提交表示该文件已经被

Work Hard, Play Harder! 2156

从无人机到机械臂:深入聊聊LQR和LQG在实际项目里的那些‘坑’与最佳实践

本文深入探讨了LQR和LQG在无人机和机械臂等实际项目中的应用挑战与最佳实践。从系统建模的妥协艺术到调参的系统化方法,再到离散化的细节处理,文章分享了工程实践中的宝贵经验。特别强调了如何应对传感器噪声、未建模动态等现实问题,并提供了实用的调试工具和诊断流程,帮助工程师避免常见陷阱,提升控制系统的稳定性和性能。

weixin_28683391的博客 386

PyQt5混搭qfluentwidgets实战:用FramelessWindow快速打造现代化界面

本文详细介绍了如何将PyQt5与qfluentwidgets组件库结合,利用FramelessWindow快速打造现代化无边框界面。通过环境配置、核心特性解析、组件混用技巧及高级样式定制,帮助开发者提升桌面应用的用户体验和美观度,特别适合需要现代UI设计的Python开发者。

sugar的博客 969

虚拟项目学习git/github原理与基本操作5

首先查看一下我们当前项目的提交历史,可以使用git log $ git log watkins@watkins:~/watkins/finance$ git log commit f2f51bd6eefdd115ec4be37540f97dfb81828ad1 Author: weixingstudio Date: Thu Jan 3 13:32:15 2013 +0800

Work Hard, Play Harder! 1944

车载测试工程师必备:5分钟搞定CANoe台架搭建(附DBC导入技巧)

本文为车载测试工程师提供快速搭建CANoe测试台架的实用指南,涵盖硬件连接、DBC文件导入及常见报错解决方案。通过详细步骤和高效技巧,帮助工程师在5分钟内完成台架搭建,提升车载测试效率,特别适合紧急功能验证场景。

potato的博客 812

虚拟项目学习git/github原理与基本操作8

假设目前我们的项目状态是这样的,如下图所示,分支的情况,当前已经把其他的分支都合并到了master分支。 接下来的操作都以上面图中最新的master分支为基础进行,前面的都不去讨论。 现在我们将master分支向前推进两步,分别添加写别的功能,在function2中。 如果不推送到远端的话,远端仓库的HEAD指针会比当前工程的指针落后一步。 所以把工程推送到远端。 然后再

Work Hard, Play Harder! 1747

【100%通过率】2023华为od机试C卷【螺旋数组矩阵】C++ 实现

给出数字个数n和行数m(1 < n,m < 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成个一m行矩阵。疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。输入一行,两个整数,空格隔开,依次表示n、m。4.数字不够时,使用单个*号占位。3.填充数字时优先填充外部。1:模拟整个过程打印即可。1.每行数字的个数一样多。小明对这个矩阵有些要求。2.列的数量尽可能少。

MISAYAONE的博客 1247

024、反激变换器的短路保护设计

本文详细探讨了反激变换器短路保护的设计要点与实践经验。作者通过实际案例分析了短路时反激拓扑的电流特性,指出初级峰值电流限制是最基础的保护手段,但需配合打嗝模式使用。文章重点剖析了打嗝模式设计的三个关键陷阱:频率设定、退出条件和软启动衔接。同时强调次级侧辅助保护、变压器参数优化、环路响应协调的重要性,并比较了自恢复与锁死方案的适用场景。最后提出实测验证的四个关键点和设计经验:不盲信芯片手册、保护电路独立设计、充分留有余量、进行破坏性测试。全文以工程实践为导向,为反激电源的可靠短路保护提供了系统性解决方案。

Jack010169的博客 240

虚拟项目学习git/github原理与基本操作3

获得远端仓仓库的代码,使用git clone  $ git clone git://github.com/schacon/grit.git 你可能已经注意到这里使用的是 clone 而不是 checkout。这是个非常重要的差别,Git 收取的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。实际上,即便服务器的磁盘发生故障,用任何一个克

Work Hard, Play Harder! 1265

IDEA的使用指南

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

利用GitHub高效学习Python:从环境搭建到项目实战的完整指南

开源协作是现代软件开发的核心实践,其原理在于通过版本控制系统(如Git)和代码托管平台(如GitHub)实现全球开发者的分布式协作与知识共享。这一模式的技术价值在于提供了海量、实时、高质量的真实项目代码库,极大地降低了学习门槛并加速了工程能力的培养。在Python学习领域,GitHub的应用场景尤为广泛,学习者可以通过阅读、运行和修改开源项目,将理论知识转化为解决实际问题的能力。本文聚焦于如何系统性地利用GitHub进行Python学习,涵盖了虚拟环境配置、Git操作、项目搜索与评估、代码深度阅读、以及从模

weixin_30780649的博客 362

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

虚拟项目学习git/github原理与基本操作4

新建一个新的文件,作为项目的第一个正式文件,因为当前我们的项目中已经包含一个README文件,这个时候做了一次项目的提交,所以我们现在项目的一个版本记录了当前版本的所有文件的镜像,我们称为C1。 查看当前项目状态: git status 会给出当前项目中的文件的状态,是未跟踪,还是已经修改没暂存,或者已经暂存,或者已经提交等状态。 watkins@watkins:~/w

Work Hard, Play Harder! 1546

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux 下建立 Git 与 GitHub 的连接并克隆到本地

Linux 下建立 Git 与 GitHub 的连接 Git 是一款开源的分布式版本控制系统,而 GitHub 是依托 Git 的代码托管平台。 GitHub 利用 Git 极其强大的克隆和分支功能,使得社区成员能够自由地参与到开源项目中去。 不过,在开始学习之前,你需要一个 GitHub 账号,以及一台能联网的 Linux 虚拟机。 ====准备工作==== 安装 Git ...

井底之蛙 2万+

虚拟项目学习git/github原理与基本操作6

在系统发布新版本或者有里程碑式的重大版本变化的时候,我们往往习惯给软件加个tag. 用来做标注与说明,同时tag的使用也比冗长的版本号要方便得多。 $ git tag 使用上面的命令可以查看当前系统的所有的tag. watkins@watkins:~/watkins/finance$ git tag v0.1 watkins@watkins:~/watkins/fin

Work Hard, Play Harder! 1460

windows 虚拟环境Django项目提交到GitHub总结

在写了很多次项目之后,今天突然决定重新写,并边写边提交到GitHub,简单总结一下经验,以及中间出现的一些错误。 由于之前没有经验,所以事先在GitHub上新建了仓库。正由于这一步,所以导致了后续的一系列事情。 由于之前在Windows系统上面提前安装了pip,所以个人建议,对于学习python,安装pip真的非常重要 一、创建虚拟环境         由于个人使用的是python3.6 ...

wuda19920215的博客 1007

GitHub克隆远程项目到本地(可以克隆指定文件夹)以及从本地上传文件到GitHub(Linux和Windows均可,对虚拟机也适用)

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。我们在上面浏览时,有时会发现一些对我们很有用的源代码或者文件。

代码背包客的博客 5124

GitHub实战:Python学习者的代码阅读与项目拆解指南

在编程学习过程中,理解代码结构与工程实践是提升开发能力的关键环节。通过阅读和分析真实项目代码,开发者可以深入掌握模块化设计、异常处理机制以及测试驱动开发等核心原理。这种基于实战的学习方法,能够帮助学习者跨越从理论到实践的鸿沟,快速积累解决实际问题的经验。特别是在Python生态中,结合GitHub这一平台,学习者可以接触到大量使用流行框架如Django、Flask以及数据处理库如Pandas的优质项目。通过系统性地拆解项目,例如从环境配置、依赖管理到核心逻辑分析,学习者不仅能巩固语法知识,更能领悟工程化思维

virusswb的专栏 300

如何在虚拟机Linux下克隆github上的项目

如何在虚拟机Linux下克隆github上的项目 博主情况 刚入门虚拟机 Linux+Centos7 具体操作 在终端键入git clone https://github.com/Tencent/ncnn.git 后面这个链接,在其他的博客中,是这样的https://github.com/Tencent/ncnn 可以看到少了个.git,虽然也可以,但是博主亲测,速度很慢 我想这些博主应该是直...

Jesse_zwj的博客 5520

虚拟项目学习git/github原理与基本操作9

继续在原来的项目的基础上继续推进,我们在原来合并了master和featurex1的基础上,继续推进两步master分支。 然后我们推进featurex1分支两步。 这个时候featurex1分支的分支图如图所示: 然后,我们想把featurex1的内容合并到master分支中,假设已经测试通过了所有的featurex1分支中的内容。 watkins@watkins

Work Hard, Play Harder! 1461
上一篇: 虚拟项目学习git/github原理与基本操作9
下一篇: 摘要算法 SHA1 MD5
watkins
博客等级 码龄18年 1277粉丝 246原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值