Git教程学习:09 Git分支

文章目录

    • 1 分支的简介
    • 2 分支的相关操作
      • 2.1 分支的创建
      • 2.2 分支的切换
      • 2.3 分支的合并
      • 2.4 分支推送到远程
      • 2.5 分支的删除
      • 2.6 分支的重命名
    • 3 分支开发工作流程
      • 3.1 长期分支
      • 3.2 短期分支

1 分支的简介

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着我们可以把我们的工作从开发主线分离开来,从而影响开发主线。在很多版本控制系统中,效率稍低这个过程——通常需要完全创建一个源代码目录的副本。对于大项目来说,这样的过程会消耗很多时间。

有人把 Git 的分支模型称为它的“必杀技术特性”,也正因为这种特性,使得 Git 从队列版本控制系统中移动。为何 Git 的分支模型如此出众呢? Git 处理分支的方式就好比是速度非常轻,创建新分支这一操作几乎可以瞬间完成,并且在不同分支之间的切换操作也同样快捷。与许多其他版本控制系统不同,Git 鼓励在工作流程中间隔地使用分支与合并,这一天之内进行了许多次。理解并掌握了这一特性,我们就会意识到 Git 的强大的独特性,从而真正改变我们的开发方式。

2 分支的相关操作

2.1 分支的创建

使用git branch可以查看现有分支或创建新的分支。

当不带任何命令参数时,输入git branch可以帮助我们查看当前项目所拥有的全部分支。并且Git会使用*来标明我们当前所处的分支上。

$ git branch

image-20240118230917289

当我们在git branch后面加上<branchname>即可创建新分支:

$ git branch <branchname>
$ git branch

image-20240118231436602

2.2 分支的切换

使用git checkout <branchname>命令切换分支:

$ git checkout <branchname>
$ git branch

image-20240118231742584

切换分支后,我们就可以进行自己的开发。分支上的文件状态是不同的。我们可以通过下面的例子有着更深入的了解。

# 切换分支
$ git checkout issue102# 在分支上创建新的文件
$ touch issue102.md
$ git add issue102.md
$ git commit -m "update issue102.md"$ touch issue102.html
$ git add issue102.html
$ git commit -m "update issue102.html"

image-20240118232447601

在完成上述命令后,通过git log --oneline检查下当前Git的记录。

git log --oneline

image-20240118232558631

2.3 分支的合并

当我们在分支上完成来开发工作后,我们需要将我们在当前分支进行的工作合并到主分支上。首先我们需要切回需要合并到的分支上,此处以issue102合并到main上为例子进行演示:

# 切换回主分支
$ git checkout main# 使用git merge进行合并
$ git merge issue102# 查看所有未合并工作的分支
$ git branch --no-merged

image-20240118233250342

有时候分支的合并不会一番顺利,当我们在两个分支中对同一个文件的同一个部分进行了不同的修改,Git就没有办法顺利的合并他们,会在合并的时候产生合并冲突。比如我们在issue102分支和main分支下对issue102.md文件进行了修改,当我们将issue102分支融合到主分支上时就会发生冲突。如下图所示:

image-20240119000448761

我们也可以通过git status查看命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件。当出现矛盾后,合并的文件内容将会出现"<<<<<<“,”====“,”>>>>>>"等分割线来进行标记。如下图所示:

image-20240119001122308

当出现矛盾时,我们需要进行手动合并或者放弃合并

  • 手动合并:

手动合并的方法很简单,即我们选择要保留的代码,然后把>>>>>, ====, <<<<<<这些提示行给去掉。最后重新进行add commit的操作即可。

  • 放弃合并:

当冲突所导致的改动量很大时,我们可以选择放弃该次的合并。使用git merge --abort放弃此次的融合。如果我们在运行了git merge之后又进行了一些人为的改动,那么在abort之后,所进行的改动也会被回滚掉。

  • mergetool:

除了手动合并以及放弃合并之外,git官方开发了一个专门用来合并的工具,叫做git mergetool,它会将找到一份两个分支的祖先代码作为base(基准),然后再将两个分支的改动都列举出来作为对比,让我们在git编辑器当中决定要留下什么。

  • Use vimdiff as git mergetool
  • 使用vimdiff作为git mergetool

2.4 分支推送到远程

我们可以使用git remote -v查看远程库的详细信息。这会显示我们可以抓取或推送的origin地址。

$ git remote -v

image-20240119002451534

当我们需要推送本地分支到远程时,需要指定具体的本地分支:

# 推送本地的main分支到远程
$ git push origin main# 推送本地的issue102分支到远程
$ git push origin issue102

image-20240119002715606

当我们多人协作进行开发的时候,我们就需要使用git pull的命令来试图合并。如果合并出现冲突时,我们需要解决冲突再提交。参考多人协作。

2.5 分支的删除

Git的分支删除可以分为删除本地分支删除远程分支

  • 删除本地分支
$ git branch -d <branchname># -D 表示强行删除分支
$ git branch -D <branchname>

image-20240119003806944

image-20240119003934144

  • 删除远程分支
# origin 是远程的主机名
# branchname 需要删除的远程分支名
$ git push origin --delete issue102

image-20240119004144009

2.6 分支的重命名

$ git branch -m oldBranchName newBranchName

当我们想要将改名后的分支推送到远程时,我们需要进行如下操作:

$ git branch -m oldBranchName newBranchName   # 将本地的分支进行重命名
$ git push origin newBranchName               # 将新的分支推送到远程       
$ git push --delete origin oldBranchName      # 删除远程的旧的分支 

image-20240119005002532

3 分支开发工作流程

当我们已经了解了分支的操作后,我们应该考虑使用一种怎样的方式使我们最大化的使用分支操作的优点。在接下来的这部分中,将会介绍一些常见的分支开发工作流程。而正是由于分支管理的便捷,才衍生出这些典型的工作模式,我们以后可以根据项目实际情况进行使用。

3.1 长期分支

因为 Git 使用简单的三方合并,所以即使在一段短暂的时机,反复把一个分支合并到另一个分支中,也不是难事。也就是说,在整个项目开发周期的不同阶段,我们可以同时拥有多个开放的分支,可以定期地把某些主题分支合并到其他分支中。

许多使用 Git 的开发者都喜欢使用这种方式来工作,比如只在main分支上保留完全稳定的代码——有可能已经发布或即将发布的代码。他们还有一些叫做develop或者next的分支,被用来做后续开发或者测试稳定性——这些分支必须保持稳定,一旦达到稳定状态,它们就可以被合并入main分支了。

image-20240119005738718

image-20240119005850421

一些大型项目还有一个proposed(建议)或pu: proposed updates(建议更新)分支,它可能因包含一些不成熟的内容而不能进入next或者main分支。

3.2 短期分支

短期分支也叫做主题分支,它对任何规模的项目都适用。主题分支是一种短期分支,它被用来实现单一功能或者相关工作。比如bug分支issue分支develop分支topic分支

分支开发工作流程基本原则:

  • master分支应该是最稳定的,也就是仅用来发布新版本,平时不能直接在上面进行操作,应该保存在远程。

  • 短期分支是我们干活的分支,短期分支可以不用上传到远程,当我们完成了bug的修复,新功能的开发时才需要合并到主分支上。

  • 多使用分支来进行开发工作。

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

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

相关文章

《Linux C编程实战》笔记:信号的捕捉和处理

Linux系统中对信号的处理主要由signal和sigaction函数来完成&#xff0c;另外还会介绍一个函数pause&#xff0c;它可以用来响应任何信号&#xff0c;不过不做任何处理 signal函数 #include <signal.h> void (*signal(int signum, void (*handler)(int)))(int);可以分解…

vue3+vite:封装Svg组件

前言 在项目开发过程中&#xff0c;以svg图片引入时&#xff0c;会遇到当hover态时图片颜色修改的场景&#xff0c;我们可能需要去引入另一张不同颜色的svg图片&#xff0c;或者用css方式修改&#xff0c;为了方便这种情况&#xff0c;需要封装svg组件来自定义宽高和颜色&…

DiffMIC:融合局部和全局分析,基于扩散模型的医学图像分类方法

DiffMIC&#xff1a;基于扩散模型的医学图像分类方法 DiffMIC的核心思想糖尿病视网膜病变分级 网络结构去噪扩散模型&#xff1a;提升特征清晰度双粒度条件引导&#xff08;DCG&#xff09;&#xff1a;融合局部和全局分析条件特定的最大均值差异&#xff08;MMD&#xff09;正…

数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)三

第五部分、数组和广义表详解 数组和广义表&#xff0c;都用于存储逻辑关系为“一对一”的数据。 数组存储结构&#xff0c;99% 的编程语言都包含的存储结构&#xff0c;用于存储不可再分的单一数据&#xff1b;而广义表不同&#xff0c;它还可以存储子广义表。 本章重点从矩阵…

go语言(十一)----面向对象继承

一、面向对象继承 写一个父类 package mainimport "fmt"type Human struct {name stringsex string }func (this *Human) Eat() {fmt.Println("Human.Eat()...") }func (this *Human) Walk() {fmt.Println("Human.Walk()...") }func main() {h…

Spring成长之路—Spring MVC

在分享SpringMVC之前&#xff0c;我们先对MVC有个基本的了解。MVC(Model-View-Controller)指的是一种软件思想&#xff0c;它将软件分为三层&#xff1a;模型层、视图层、控制层 模型层即Model&#xff1a;负责处理具体的业务和封装实体类&#xff0c;我们所知的service层、poj…

安达发|APS工序排程甘特图功能介绍

工序排程甘特图的主要功能 1. 显示工序时间安排&#xff1a;工序排程甘特图可以清晰地展示生产过程中各个工序的开始时间、结束时间和持续时间&#xff0c;从而帮助企业了解生产过程中各个环节的时间安排。 2. 显示工序进度情况&#xff1a;通过工序排程甘特图&#xff0c;企业…

爬虫之Cookie获取:利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法

爬虫之Cookie获取&#xff1a;利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法 在爬虫或模拟请求时&#xff0c;特别是获取验证码的时候&#xff0c;反爬虫的网站的cookie或定期失效&#xff0c;复制出来使用是不行的为了应对这种方式&#xff0c;我们可能…

LLMs的Chain-of-Note(CoN)检索

英文原文地址&#xff1a;https://cobusgreyling.medium.com/chain-of-note-con-retrieval-for-llms-763ead1ae5c5 Chain-of-Note (CoN) 旨在通过解决噪声数据、不相关文档和domain场景来改进 RAG 实现。 2023 年 11 月 17 日 CoN 的要点 CoN 框架由三种不同类型组成&#x…

【JS逆向】某居深圳登陆信息加密逆向分析探索!

某二手房深圳站点的登陆信息加密逆向分析探索&#xff0c;需要分析查找关键的加密位置&#xff0c;位置在前上部分&#xff0c;需要理解一点代码&#xff0c;往上寻找一段代码&#xff0c;加密特征比较明显&#xff0c;找到后即可调试出来&#xff01; 网址&#xff1a; aHR0cH…

TCP服务器最多支持多少客户端连接

目录 一、理论数值 二、实际部署 参考 一、理论数值 首先知道一个基础概念&#xff0c;对于一个 TCP 连接可以使用四元组&#xff08;src_ip, src_port, dst_ip, dst_port&#xff09;进行唯一标识。因为服务端 IP 和 Port 是固定的&#xff08;如下图中的bind阶段&#xff0…

Red Hat Enterprise Linux 8.9 安装图解

引导和开始安装 选择倒计时结束前&#xff0c;通过键盘上下键选择下图框选项&#xff0c;启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致&#xff0c;引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的&#xff0c;如图所示。若手动调…