图解Git——分支的新建与合并《Pro Git》

news/2025/1/21 18:19:20/文章来源:https://www.cnblogs.com/cikiss/p/18684117

⭐分支的新建与合并

先引入一个实际开发的工作流:

  1. 开发某个网站。
  2. 为实现某个新的需求,创建一个分支。
  3. 在这个分支上开展工作。

正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理:

  1. 切换到你的线上分支(production branch)。
  2. 为这个紧急任务新建一个分支,并在其中修复它。
  3. 在测试通过之后,切换到线上分支,然后合并这个修补分支,最后改动推送到线上分支。
  4. 切换回你最初工作的分支,继续工作。

1. 新建分支

  1. 首先,模拟你正在你的项目上工作,并且在 master分支上已经有了一些提交:
    1. 提交历史图:

      编辑

  1. 现在,你将解决项目中 #53 问题,需要创建一个分支并切换到该分支:git checkout -b iss53——(创建分支git branch iss53切换分支git checkout iss53 的简写):
    1. 创建并切换后:

      编辑

  1. 在新创建的分支上工作并做提交后:git commit -a -m 'added a new footer [issue 53]'
    1. 提交 iss53 后:

      编辑

  1. 需要紧急修复 BUG(hotfix)时:
    1. 检查工作目录暂存区是否还存在未提交的修改:git status

    2. 切换回 master分支:git checkout master

    3. 建立 hotfix分支:git checkout -b hotfix

    4. 修复 Bug 后提交:git commit -a -m 'fixed the Bug'

    5. 提交后:

      编辑

  1. 将修改后的 hotfix 分支合并到 master 分支:
    1. git checkout master:切换回 master 分支。

    2. git merge hotfix:合并 hotfix 分支。

    3. 这时会出现 Fast-forward: 在合并时,如果一个分支是另一个分支的直接后继,Git 会将指针直接向前推进,无需解决冲突,这种合并叫做“快进(fast-forward)”。

    4. 合并后,master 被快进到 hotfix

      编辑

    5. 删除 hotfixgit branch -d hotfix

    6. 切换回工作分支— iss53分支:git checkout iss53

    7. 完成 iss53 工作后提交:git commit -a -m 'finished the new footer [issue53]'

      1. 提交 issue53 后的历史记录图:

        编辑


2. 合并分支

模拟你已经完成了 iss53 的全部工作,并打算将其合并到 master 分支。

  1. 切换到 master 分支并合并 iss53
    1. 合并前:

      编辑

    2. git checkout master

    3. git merge iss53

    4. 合并后:

      编辑

    5. 三方合并:当两个分支的提交历史分叉时,Git 需要做三方合并,使用两个分支的末端快照和公共祖先来合并。与快进合并不同,Git 会创建一个新的合并提交,它有多个父提交。

    6. 删除 iss53分支:git branch -d iss53


3. 遇到冲突时的合并分支

模拟合并时并不顺利,出现了冲突:对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

  1. 查看冲突:使用 git status命令查看冲突的原因:
$ git status
On branch master
You have unmerged paths.(fix conflicts and run "git commit")Unmerged paths:(use "git add <file>..." to mark resolution)both modified:      index.htmlno changes added to commit (use "git add" and/or "git commit -a")

  1. 解决冲突
    1. 打开有冲突的文件,Git 会在冲突部分插入特殊标记:
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

    1. 你需要选择保留一个版本的内容,或合并两者的内容。解决后,删除冲突标记(<<<<<<<, =======, >>>>>>>)。
  1. 标记冲突已解决:
    1. git add将解决后的冲突标记为已解决:git add index.hmtl
  1. 完成合并并提交:
    1. git commit完成合并并提交。
    2. Git 会自动生成一个合并提交信息,例如:
Merge branch 'iss53'
Conflicts:index.html

  1. 使用图形化工具(可选):
    1. 如果需要,可以运行 git mergetool 启动图形化工具来帮助解决冲突:git mergetool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872917.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.21 javaweb学习

今天学习了html中onsubmit的使用 onsubmit事件处理器是专门用于表单(form)的提交事件,所以要注意div标签是不能直接使用onsubmit的 今天在作业项目中出现了这样的问题,将onsubmit放在了div标签中,导致数据无法被正常处理,上传数据有误,修改至form后问题解决 修改前数据提…

思通数科舆情系统的分析报告主要内容及其市场价值探析

思通数科舆情系统的分析报告广泛应用于以下几个领域: (1) 企业品牌管理与危机预警:系统能够自动发出警报,为企业的公关部门提供应对策略和决策依据,帮助企业迅速做出反应,避免危机的进一步扩展。 (2) 政府舆情监管与社会治理:政府部门能够利用该系统的热点事件排名、舆情…

北汇信息致客户的一封感谢信

北汇信息致客户的一封感谢信尊敬的客户:感谢您选择北汇信息!2024年是不平凡的一年,中国汽车产量再创新高,出海与内卷挑战不断。北汇信息作为汽车电子测试领域的服务商,秉承“价值创造、共享成功”的理念,一直致力于为国内外汽车客户提供优质的产品和服务,共同面对这些挑…

001 修改博客园侧边栏的顺序

打开配置页:https://i.cnblogs.com/settings在“博客侧边栏公告”添加代码<script> $(document).ready(function(){//returnvar list=[sidebar_recentcomments,//最新评论sidebar_categories,//随笔分类、随笔档案sidebar_toptags,//我的标签sidebar_shortcut,//常用链接…

销售进阶:三步提问法,掌握客户心理

在销售行业,时间就是金钱,我们必须争分夺秒地搞定客户。但也不能盲目行动,而要稳扎稳打。关键在于快速抓住客户需求,而客户往往不会主动透露他们的需求,甚至自己都不清楚自己想要什么。这就需要我们通过巧妙的提问来破局,否则忙活半天也只是白费力气。 最让人头疼的是,跟…

寒假集训笔记 | | 第一课

C++STL --第一课 C标准库常用函数<cstring>memset() 暴力清空 char str[10]; memset(str,0,sizeof(str));<cmath>三角函数、指数函数、浮点取整函数<cstdlib>qsort() C语言快排 rand() 随机数 malloc() free() C语言动态内存分配<cctype>isdigit()…

Svelte 最新中文文档翻译(1)—— 概述与入门指南

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

平面二连杆机构的动力学方程

动力学研究物体的运动和作用力之间的关系。机器人动力学问题有两类:一是已知机器人各关节的驱动力或力矩,求解机器人各关节的位置、速度和加速度,这是动力学正问题;二是已知各关节的位置、速度和加速度,求各关节所需的驱动力或力矩,这是动力学逆问题。机器人的动力学正问…

【红队】C2框架:Covenant

一、项目介绍 Covenant是一个.NET开发的C2(command and control)框架,旨在突出.NET的攻击面,并充当红队成员的协作命令和控制平台,该工具不仅支持Linux,MacOS和Windows,还支持docker容器,最特别的地方是支持动态编译,能够将输入的C#代码上传至C2 Server,获得编译后的文…

3. 使用sql查询csv/json文件内容,还能关联查询?

1. 简介 我们在前面的文章提到了calcite可以支持文件系统的数据源适配, 其实官方已经提供了相应的能力, 其支持csv和json的查询适配, 废话不多说, 直接展示. 2. Maven <!-- calcite文件系统支持 --> <dependency><groupId>org.apache.calcite</groupId>…

一文搞懂 APP 算法备案

今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP 里使用的算法详情,向有关部门进行申报登记。这就如同给算法这个 “幕后大脑” 办一张正式…

IDEA 在远程 Tomcat 上运行项目(转载补充版)

转载:IDEA 在远程 Tomcat 上运行项目(亲身避坑版) 我在操作的时候,遇到个问题,提示Unable to open debugger port (192.168.252.232:54578): java. net. ConnectException "Connection refused: connect" 原因是,开启JVM调试,需要在2.1小节设置环境变量的时候…