《Git 简易速速上手小册》第3章:分支管理(2024 最新版)

在这里插入图片描述

文章目录

  • 3.1 创建与合并分支
    • 3.1.1 基础知识讲解
    • 3.1.2 重点案例:为 Python 项目添加新功能
    • 3.1.3 拓展案例 1:使用 Pull Requests (PRs) 在团队中合作
    • 3.1.4 拓展案例 2:解决合并冲突
  • 3.2 分支策略的最佳实践
    • 3.2.1 基础知识讲解
    • 3.2.2 重点案例:开发一个 Python Web 应用
    • 3.2.3 拓展案例 1:紧急修复生产错误
    • 3.2.4 拓展案例 2:准备发布
  • 3.3 解决分支冲突
    • 3.3.1 基础知识讲解
    • 3.3.2 重点案例:合并 Python 项目的特性分支
    • 3.3.3 拓展案例 1:使用 GUI 工具解决冲突
    • 3.3.4 拓展案例 2:使用 `git rebase` 处理冲突

3.1 创建与合并分支

在 Git 的多维宇宙中,分支让我们能够在不同的时间线上安全地开发新功能、修复 bug 或尝试新想法,而不会影响到主分支的稳定。理解如何有效地创建和合并分支,是每个使用 Git 的开发者都需要掌握的技能。

3.1.1 基础知识讲解

  • 创建分支:使用 git branch [branch-name] 创建一个新分支,但这个命令不会自动切换到新分支。要开始在新分支上工作,你需要使用 git checkout [branch-name] 切换到该分支。或者,你可以使用 git checkout -b [branch-name] 来创建并立即切换到新分支。
  • 合并分支:一旦在分支上完成了工作,你就可以通过 git merge [branch-name] 将其合并回主分支。这个命令应该在你想要合并到的目标分支上执行,通常是 mainmaster

3.1.2 重点案例:为 Python 项目添加新功能

假设你正在开发一个 Python 项目——一个简单的命令行待办事项应用。你决定添加一个新功能:允许用户为待办事项设置优先级。

步骤 1:创建新分支

git checkout -b feature-add-priority

在这个新分支上,你开始开发新功能。

步骤 2:编写代码

todo.py 中,你添加了新的代码来支持优先级设置:

def add_todo_with_priority(todo, priority):# 添加带有优先级的待办事项的逻辑pass

步骤 3:提交更改

完成开发后,你提交了更改。

git add todo.py
git commit -m "Add priority to todo items"

步骤 4:合并分支

现在,你准备将这个新功能合并回主分支。

git checkout main
git merge feature-add-priority

成功!你的新功能现在是应用的一部分了。

3.1.3 拓展案例 1:使用 Pull Requests (PRs) 在团队中合作

假设你的项目托管在 GitHub 上,你想要在团队中分享并审查这个新功能。

步骤 1:推送分支到远程仓库

git push origin feature-add-priority

步骤 2:创建 Pull Request

在 GitHub 上,对 feature-add-priority 分支创建一个新的 Pull Request,邀请你的团队成员对这个新功能进行审查。

通过 PR,你的团队可以在合并代码之前讨论、审查和测试这个新功能。

3.1.4 拓展案例 2:解决合并冲突

在你的 Pull Request 被审查的同时,另一个团队成员也对 todo.py 做了更改并已经合并到了 main 分支。当你尝试合并你的分支时,Git 报告了冲突。

步骤 1:更新本地 main 分支

git checkout main
git pull

步骤 2:在你的分支上执行合并

git checkout feature-add-priority
git merge main

Git 通知你 todo.py 有冲突。你打开文件,手动解决这些冲突,然后提交更改。

git add todo.py
git commit -m "Resolve merge conflict with main"
git push origin feature-add-priority

最后,你的 Pull Request 已经准备好被合并,而且没有任何冲突了。

通过这一章,你学会了如何在 Git 中创建和管理分支,以及如何在项目开发中有效利用分支来添加新功能和修复错误。记住,分支是你在代码宇宙中探索新领域的魔法棒,使用它们可以让你的开发工作变得更加高效和有条不紊。

在这里插入图片描述


3.2 分支策略的最佳实践

在 Git 的宇宙中,合理的分支策略就像是星际旅行的导航图,确保你能够在代码的海洋中航行而不迷失方向。分支策略的选择对于维持项目的结构清晰、提高团队协作效率、并加速开发流程至关重要。

3.2.1 基础知识讲解

  • 主分支(Main or Master):这是项目的主干,通常包含生产级的代码。所有的开发分支最终都会合并回这里。
  • 开发分支(Develop):用于日常开发的分支,这里是所有新特性、改进和 bug 修复的起点和终点。
  • 特性分支(Feature branches):从开发分支分出的,用于开发新特性或改进。每个特性分支集中解决一个具体问题,开发完成后合并回开发分支。
  • 修复分支(Hotfix branches):用于快速修复生产环境中的问题。它们从主分支分出,并在修复后直接合并回主分支和开发分支。
  • 发布分支(Release branches):当开发分支的当前状态准备发布时,从开发分支分出。用于准备发布版本,修复发现的最后时刻的 bug,完成后合并到主分支和开发分支。

3.2.2 重点案例:开发一个 Python Web 应用

假设你正在开发一个 Python Web 应用,计划采用 Git Flow 分支策略。

步骤 1:建立分支结构

首先,确保你有 maindevelop 分支。所有新特性都将从 develop 分支中分出。

git checkout -b develop
git push -u origin develop

步骤 2:开发新特性

你决定添加一个新的 API 端点。因此,你从 develop 分支创建一个新的特性分支。

git checkout -b feature-new-api develop

在这个分支上,你添加了新的 API 端点相关的代码:

# app.py
def new_api():return "New API Response"

完成后,将特性分支合并回 develop 分支。

git checkout develop
git merge feature-new-api

3.2.3 拓展案例 1:紧急修复生产错误

你的应用在生产中发现了一个严重的 bug。你需要立即修复它,因此你从 main 分支创建一个 hotfix 分支。

git checkout -b hotfix-fix-bug main

修复完成后,将 hotfix 分支合并回 maindevelop 分支,确保所有的改进都被纳入。

git checkout main
git merge hotfix-fix-bug
git checkout develop
git merge hotfix-fix-bug

3.2.4 拓展案例 2:准备发布

develop 分支准备好发布新版本时,你从 develop 分支创建一个 release 分支。

git checkout -b release-1.0.0 develop

release 分支上,你可能需要做一些最后的修复和准备工作。完成后,将 release 分支合并回 maindevelop 分支,并打上新版本的标签。

git checkout main
git merge release-1.0.0
git tag -a v1.0.0
git checkout develop
git merge release-1.0.0

通过实践这些分支策略,你不仅能保持项目的结构清晰,还能确保团队中的每个人都在正确的轨道上前进。记住,良好的分支策略是高效团队协作的基石,选择适合你团队和项目的策略,让你的开发过程像顺畅的河流一样流淌。

在这里插入图片描述


3.3 解决分支冲突

在 Git 的多维宇宙中,分支冲突就像是不同时间线的英雄遇到了意见分歧。虽然它们可能会阻碍我们的进程,但正确地解决冲突可以使我们的项目变得更加强大和一致。理解如何高效解决分支冲突是每个使用 Git 的开发者必须掌握的技能。

3.3.1 基础知识讲解

  • 冲突的成因:当两个分支对同一文件的同一部分进行了不同的修改,然后尝试合并这两个分支时,Git 无法自动决定哪个版本是正确的。这时,Git 会停止合并过程并标记出冲突的位置,等待人工解决。
  • 查看冲突:冲突的文件会被 Git 标记,并在文件中直接显示冲突的部分,通常会包含 <<<<<<<=======>>>>>>> 这样的标记。
  • 解决冲突:解决冲突需要开发者编辑冲突的文件,决定保留哪个版本的更改,或者结合两个版本的更改。解决完冲突后,需要将文件重新添加到暂存区并提交。

3.3.2 重点案例:合并 Python 项目的特性分支

假设你正在开发一个 Python 项目,项目中有一个 calculator.py 文件。你在 feature-add-function 分支上添加了一个加法函数,同时你的队友在 feature-subtract-function 分支上添加了一个减法函数。当你们尝试将这两个分支合并到 main 分支时,冲突发生了。

步骤 1:开始合并

你首先尝试合并你队友的分支:

git checkout main
git merge feature-subtract-function

合并成功,没有冲突。接着,你尝试合并你的分支:

git merge feature-add-function

这时,Git 报告 calculator.py 存在冲突。

步骤 2:解决冲突

打开 calculator.py,你看到了类似这样的内容:

<<<<<<< HEAD
def subtract(x, y):return x - y
=======
def add(x, y):return x + y
>>>>>>> feature-add-function

决定保留两个函数,并删除 Git 的标记:

def add(x, y):return x + ydef subtract(x, y):return x - y

步骤 3:完成合并

解决冲突后,你将更改添加到暂存区并提交:

git add calculator.py
git commit -m "Resolve merge conflict by including both add and subtract functions"

3.3.3 拓展案例 1:使用 GUI 工具解决冲突

许多 GUI Git 客户端和集成开发环境(IDE)如 Visual Studio Code 提供了可视化的冲突解决工具。这些工具可以直观地显示冲突,并允许你选择哪个版本要保留,或者编辑文件以结合两个版本的更改。

3.3.4 拓展案例 2:使用 git rebase 处理冲突

在某些情况下,git rebase 是一个比 git merge 更好的选择,特别是在你想要保持项目历史线性的时候。使用 rebase 时,如果遇到冲突,处理流程与 merge 类似,但每次解决冲突后,你会使用 git rebase --continue 而不是提交更改,直到 rebase 完成。

通过正确地解决分支冲突,你不仅保持了项目的一致性,还加深了对团队工作的理解。记住,冲突不是要避免的障碍,而是提高项目质量和团队协作的机会。

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

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

相关文章

git合入的parents和child

最近在管理代码&#xff0c;有2的权限&#xff0c;看到一些以前1看不到的东西。 有时候会遇到多个人基于同一节点提交代码&#xff0c;那就要选择先合入和后合入&#xff0c;如果这多人修改到同一个文件同一个地方&#xff0c;就可能产生冲突&#xff0c;一般要避免这种情况出…

Python进阶----在线翻译器(Python3的百度翻译爬虫)

目录 一、此处需要安装第三方库requests: 二、抓包分析及编写Python代码 1、打开百度翻译的官网进行抓包分析。 2、编写请求模块 3、输出我们想要的消息 三、所有代码如下&#xff1a; 一、此处需要安装第三方库requests: 在Pycharm平台终端或者命令提示符窗口中输入以下代…

可解释性AI(XAI)的主要实现方法和研究方向

文章目录 每日一句正能量前言主要实现方法可解释模型模型可解释技术 未来研究方向后记 每日一句正能量 当你还不能对自己说今天学到了什么东西时&#xff0c;你就不要去睡觉。 前言 随着人工智能的迅速发展&#xff0c;越来越多的决策和任务交给了AI系统来完成。然而&#xff…

必看!嵌入式基于UART的通信协议-RS232、RS485协议解析

这两种都是串口通讯的变种&#xff0c;为了提升串口通信的距离和稳定性。通常来说&#xff0c;正常的串口通信使用的是TTL电平&#xff0c;即高电平为2.4-5V&#xff0c;低电平为0-0.4V。高低电平之间的范围很小&#xff0c;如果有静电或者其他外界的干扰&#xff0c;很快会将低…

BT656视频传输标准

前言 凡是做模拟信号采集的&#xff0c;很少不涉及BT.656标准的&#xff0c;因为常见的模拟视频信号采集芯片都支持输出BT.656的数字信号&#xff0c;那么&#xff0c;BT.656到底是何种格式呢&#xff1f; 本文将主要介绍 标准的 8bit BT656&#xff08;4:2:2&#xff09;YCbC…

十分钟掌握前端获取实时数据的三种主流方式

前端获取实时数据的三种主流方式 本文聊聊前端获取实时数据的三种主要方式。想象一下&#xff0c;我们在网上购物时&#xff0c;经常能看到最新的优惠信息弹出&#xff0c;或者在社交媒体上看到朋友的最新动态更新。这些都是因为后端在默默地向我们的页面推送了最新的消息。那…

22.HarmonyOS App(JAVA)位置布局PositionLayout使用方法

不常用 在PositionLayout中&#xff0c;子组件通过指定准确的x/y坐标值在屏幕上显示。(0, 0)为左上角&#xff1b;当向下或向右移动时&#xff0c;坐标值变大&#xff1b;允许组件之间互相重叠 布局方式 PositionLayout以坐标的形式控制组件的显示位置&#xff0c;允许组件相…

【C++】win11,OpenCV安装教程(VS2022)

1.下载 首先进入官网&#xff0c;下载对应的安装包&#xff0c;苹果系统就选IOS pack&#xff0c;微软系统就选Windows 下载地址&#xff1a;Releases - OpenCV 不方便外网下载的话可以下载我分享的百度网盘资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1lV7l…

rhel8静态ip配置

1.先cd进来 2.把默认的dhcp改成static IPADDR192.168.211.22 22随意改&#xff0c;255以下的数字都行&#xff0c;1和255不要用 GATEWAY192.168.211.2和虚拟机默认网关保持一致 重启网络 nmcli c reload和 nmcli c up ens160 ping百度测试--&#xff08;成功了&#xff0…

如何在Linux中安装新版的Python软件

一、引言 Python是目前世界上最为流行的编程语言&#xff0c;其在人工智能领域表现尤为出色。通常&#xff0c;我们为了测试github上面的一些项目&#xff0c;比如&#xff1a;chat-on-wechat&#xff0c; 我们就可以在vps上的Linux系统中安装Python&#xff0c;从而实现各种人…

CentOS镜像如何下载?在VMware中如何安装?

一、问题 CentOS镜像如何下载&#xff1f;在VMware中如何安装&#xff1f; 二、解决 1、CentOS镜像的下载 &#xff08;1&#xff09;官方网站 The CentOS Project &#xff08;2&#xff09;官方中文官网 CentOS 中文 官网 &#xff08;3&#xff09;选择CentOS Linux…

92.网游逆向分析与插件开发-游戏窗口化助手-显示游戏数据到小助手UI

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;游戏窗口化助手的UI设计-CSDN博客 码云地址&#xff08;游戏窗口化助手 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;e8116af3a7b0186adba…

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境&#xff0c;一是翻译环境&#xff0c;二是运行环境&#xff0c;计算机能识别的是二进制的指令&#xff0c;人写完代码后通过翻译环境&#xff0c;使代码变成计算机能读懂的可执行的机器指令&a…

机器人工具箱学习(一)

一、机器人工具箱介绍 机器人工具箱是由来自昆士兰科技大学的教授Peter Corke开发的&#xff0c;被广泛用于机器人进行仿真&#xff08;主要是串联机器人&#xff09;。该工具箱支持机器人一些基本算法的功能&#xff0c;例如三维坐标中的方向表示&#xff0c;运动学、动力学模…

极限方法大总结【高数笔记】

【方法步骤】 分几步&#xff1f;又有几个小步骤&#xff1f; 【不同类型的极限】 不同类型极限的方法又有哪些步骤&#xff1f; 不同类型极限的方法有哪些前提条件&#xff1f; 个别类型极限方法的技巧有哪些&#xff1f;

『运维备忘录』之 Yum 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

Bootstrap5 导航组件和面包屑

Bootstrap5 导航组件和面包屑 Bootstrap5 提供了一种简单快捷的方法来创建基本导航&#xff0c;它提供了非常灵活和优雅的选项卡和Pills等组件。 Bootstrap5 的所有导航组件&#xff0c;包括选项卡和Pills&#xff0c;都通过基本的 .nav 类共享相同的基本标记和样式。 使用 B…

深入探究:JSONCPP库的使用与原理解析

君子不器 &#x1f680;JsonCPP开源项目直达链接 文章目录 简介Json示例小结 JsoncppJson::Value序列化Json::Writer 类Json::FastWriter 类Json::StyledWriter 类Json::StreamWriter 类Json::StreamWriterBuilder 类示例 反序列化Json::Reader 类Json::CharReader 类Json::Ch…

2024年考PMP还有什么用?

PMP 是项目管理专业人士资格认证的意思&#xff0c;也是项目管理领域通用的证书&#xff0c; 做项目的基本都会去考。 要说 PMP 有啥作用&#xff1f; 个人感觉 PMP 证书更多的是跳槽、转行的敲门砖的作用&#xff0c;因为现在很多公司都要 PMP 证书&#xff0c;有了可以加分…

工厂方法模式(Factory Method Pattern)

原文地址:https://jaune162.blog/design-pattern/factory-method-pattern/ 概述 工厂方法模式(Factory Method Pattern)是一个对象创建型模式。 定义一个用于创建对象的接口,让子类决定实例化哪一个类。 Factory Method使一个类的实例化延迟到其子类。 – 《设计模式:可复…