Git 指令深入浅出【2】—— 分支管理

Git 指令深入浅出【2】—— 分支管理

  • 分支管理
    • 1. 常用分支管理指令
    • 2. 合并分支
      • 合并冲突
        • 合并模式
    • 3. 实战演习

分支管理

1. 常用分支管理指令

# 查看本地分支
git branch
# 查看远程分支
git branch -r
# 查看全部分支
git branch -a

image.png

HEAD 指向的才是当前的工作分支

# 查看当前分支的提交记录
git log --graph --abbrev-commit

# --abbrev-commit 仅显示 HA-1校验和的前几个字符的 提交ID

image.png

常用分支名

  • master 主分支 用于生产环境
  • release 预发布分支,用于测试环境、预发布环境
  • develop 开发分支,用于开发环境
  • feature 需求开发分支,用于本地
  • hotfix 紧急修复分支,用于本地
git branch <branchName>

# * 所标示的分支是 “当前分支”

image.png

# 切换分支
git checkout <branchName>

image.png

切换工作分支后,在未合并分支之前,分支之间不会影响

# 新分支提交
git add <fileName>
git commit -m "test new branch"
git log --graph

image.png
image.png

# 删除分支(强制 与 非强制)
git branch -d <branchName>
git branch -D <branchName> # 强制删除 可以通过 git branch --help 自行查看

# 删除远程分支
git branch -d -r <remote>/<branchName>

image.png
image.png

强制删除会带来什么结果呢?上方已经给出提示了“分支dev没有完全合并”,这就意味着在分支上新创建的文件都不会被保留下来,自然也不会有提交记录了。写完代码之后直接就删除分支肯定是不合理的,需要合并到**master**之后再删除无用分支才正确。

ls 
git log --graph

image.png
image.png
image.png

# 显示关于远程仓库的信息,包括分支是否跟踪
git remote show origin # origin 是远程仓库名

image.png

# 移除本地仓库中远程仓库已删除的分支
git remote prune <warehouseName>

2. 合并分支

git branch dev # 创建新分支
git checkout dev # 切换至新分支
#-------------------------------------
git checkout -b <branchName> # 创建并切换到新分支(上两条指令 2合1)
# 在 新分支 下创建文件并提交
touch file7
git add file7
git commit -m "merge and delete file7"

image.png

# 合并分支
git checkout master
git merge dev
git branch -d dev

请注意看下方的两个部分。第一次,笔者尝试在dev分支上合并master分支,然后再删除dev分支。但很明显这是错的,如何刚刚把代码合并到dev分支,又马上删除dev那这样的合并还有什么意义呢?所以,正确的做法是:

  • 切换到 要 “合并到”的分支。此处我们要合并到master分支上
  • 合并分支
  • 删除无用分支

image.pngimage.png

合并冲突

因为是多人协作,合并冲突的发生几乎是不可避免的。但是为什么会产生冲突呢?因为开发人员修改了同一份文件,但 Git 不知道以谁的文件为标准保留,因此就将这个冲突交给开发人员来解决。我们举一个现实中的例子:master分支的代码出现线上Bug,于是开发人员修改之后把修改的代码提交上去,此时的代码是最新最安全的;而其他开发人员在开发之初,拉取的是原本有Bug的master分支,这是就很有可能发生冲突。
下面的图可以很直观的反应冲突现场:
image.png

# 冲突现场准备
git checkout -b dev
ls
vim file7 # 随便写点东西保存
git add file7
git commit -m "dev-file7"

git checkout master
vim file7 # 随便写点东西保存
git add file7
git commit -m "master-file7"

image.png

# 发生冲突
# 要 “合并到”master分支,所以是在 master分支 上合并 dev分支
git merge dev
cat file7

image.png
直接看下图,我们很好理解发生冲突之后的变化。最后,我们只要确保文件上的内容是我们想保存的即可。
image.png

# 解决冲突
vim file7
cat file7 # 这是笔者想保留的内容(即 两个分支都增加的内容)
git add file7
git commit -m "解决file7的分支冲突"
git merge dev

需要注意的是:在手动解决冲突之后,需要再次提交文件
image.png
image.png

合并模式

在正式讨论合并模式之前,我们先看看之前我们实验过的图。如果只看上面那张,我们可以很清晰的感受到,最新的代码是由dev分支合并而来的。
image.png
但是,我们用git log --graph打印出来的图却没有这样色彩分明的线条,这时我们怎么区分最新的代码是master分支修复后的结果?还是dev分支合并后的结果呢?
image.png

这就要讲到合并模式相关的知识了。我们上方所用的合并模式是ff -- Faster Forward快速合并模式。这种模式是无法看到最新的提交时是commit得来还是merge得来。如果想要区分,可以使用no-ff即 非快速合并模式。

git merge --no-ff -m "merge dev" dev

image.png
image.png

3. 实战演习

演习内容:在开发过程中遇到紧急Bug需要处理,需要保存当前开发分支内容去修复Bug,修复完成后完成开发,最后合并到主分支上。

# 保存工作区内容
git checkout dev
ls
vim file8
cat file8
git add file8
git stash # 未commit,将工作区的内容保存

image.png
使用git stash 保存的内容是可以在.git中看到的

# 查看保存内容
cd .git/refs
cat stash
git cat-file -p '序列化ID'

image.png

# 修复master分支Bug
git checkout master
git checkout -b hotfix
vim file8
git add file8
git commit -m "修复master分支的紧急Bug"
git checkout master
git merge --no-ff -m "merge hofix" hotfix
git log --graph
git branch -d hotfix

image.png
image.png

# 继续完成开发并合并分支
git checkout dev
git stash list # 查看保存内容
git stash pop # 恢复保存内容
vim file8
cat file8
git add file8
git commit -m "完成开发"

git merge --no-ff -m "合并master分支到dev分支,以免dev分支存在bug污染master分支" master

vim file8
git add file8
git commit -m "解决合并冲突"
git log --graph

image.png
下方这个图不是很好看,其实只要分清哪一条是master分支(中间那条)即可。值得关注的是,将master分支合并到dev分支的画法。
image.png
image.png

# 正式合并
git checkout master
git merge --no-ff -m "正式合并到master分支上" dev
cat file8
git log --graph

image.png
image.png
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW高温摩擦磨损测试系统

LabVIEW高温摩擦磨损测试系统 介绍了一个基于LabVIEW的高温摩擦磨损测试系统的软件开发项目。该系统实现高温条件下材料摩擦磨损特性的自动化测试&#xff0c;通过精确控制和数据采集&#xff0c;为材料性能研究提供重要数据支持。 项目背景 随着材料科学的发展&#xff0c;…

数据分析之Logistic回归分析(二元逻辑回归、多元有序逻辑回归、多元无序逻辑回归)

1、Logistic回归分类 在研究X对于Y的影响时&#xff1a; 如果Y为定量数据&#xff0c;那么使用多元线性回归分析&#xff1b;如果Y为定类数据&#xff0c;那么使用Logistic回归分析。 结合实际情况&#xff0c;可以将Logistic回归分析分为3类&#xff1a; 二元Logistic回归…

【办公类-21-08】三级育婴师 多个二级文件夹的docx合并成PDF

背景需求: 前期制作了单题文件夹 【办公类-21-07】新建文件夹 三级育婴师操作参考题目-CSDN博客文章浏览阅读439次&#xff0c;点赞7次&#xff0c;收藏10次。【办公类-21-07】新建文件夹 三级育婴师操作参考题目https://blog.csdn.net/reasonsummer/article/details/1363360…

SpringCloud(19)之Skywalking应用上篇

一、Skywalking概述 随着互联网架构的扩张&#xff0c;分布式系统变得日趋复杂&#xff0c;越来越多的组件开始走向分布式化&#xff0c;如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用&#xff0c;这些组件共同构成了繁杂的分布式网络。 思考以下…

使用Julia语言及R语言进行格拉布斯检验

在日常的计量检测工作中经常会处理各种数据&#xff0c;在处理数据之前会提前使用格拉布斯准则查看数据中是否存在异常值&#xff0c;如果存在异常值的话应该重新进行计量检测&#xff0c;没有异常值则对数据进行下一步操作。判断异常值常用的格拉布斯方法基于数据来自正态分布…

深度学习系列61:在CPU上运行大模型

1. 快速版 1.1 llamafile https://github.com/Mozilla-Ocho/llamafile 直接下载就可以用&#xff0c;链接为&#xff1a;https://huggingface.co/jartine/llava-v1.5-7B-GGUF/resolve/main/llava-v1.5-7b-q4.llamafile?downloadtrue 启动&#xff1a;./llava-v1.5-7b-q4.lla…

shell 小数比较大小

shell 小数比较大小 #!/bin/bash num15.9 result$(echo "$num1 > 5" | bc) #$num1 > 5 时返回0&#xff0c;$num1 < 5 时返回1 echo $result if [ $result -gt 0 ]; then echo ">>>>>>> $1 $2 数据异常: $hive_num" else e…

适用于 Windows 的 5 款最佳免费数据恢复软件榜单

每个计算机用户都曾经历过数据丢失的情况。很容易错误地删除重要的文件和文件夹&#xff0c;当发生这种情况时&#xff0c;可能会导致不必要的心痛和压力。值得庆幸的是&#xff0c;可以恢复 Windows PC 上丢失的数据。在本文中&#xff0c;我们将分享您可以使用的五种最佳 Win…

HTML+CSS:花式加载

效果演示 实现了一个动态加载文本效果&#xff0c;通过定义变量和应用动画效果来实现文本的动态展示。 Code <div class"container"><h1>loading...</h1> </div>:root {--text-color: orangered; /* 定义文本颜色变量为橙红色 */--inner-st…

【鸿蒙 HarmonyOS 4.0】登录流程

一、背景 登录功能在应用中是一个常用模块&#xff0c;此次使用 HarmonyOS 实现登录流程&#xff0c;包含页面呈现与网络请求。 二、页面呈现 三、实现流程 3.1、创建项目 构建一个ArkTS应用项目(Stage模型)&#xff0c;今天创建流程可查看官网教程&#xff1a;文档中心 目…

Serial studio 入门教程(安装+使用)

最近有一个朋友推荐了一个嵌入式调试工具 serial studio 用了一下很方便 今天记录一下过程 介绍 serial studio 支持多种协议和可自己定制的界面 安装 Serial Studio 国内下载地址&#xff1a; serial studio 国内镜像 安装时出现以下界面 点更多 就可以继续安装了 使用 …

新手想玩硬件,买单片机还是树莓派好?

新手想玩硬件&#xff0c;买单片机还是树莓派好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#x…

7.1.3 Selenium的用法2

目录 1. 切换 Frame 2. 前进后退 3. 对 Cookies 操作 4. 选项卡管理(了解) 5. 异常处理 6. 反屏蔽 7. 无头模式 1. 切换 Frame 我们知道网页中有一种节点叫作 iframe&#xff0c;也就是子 Frame&#xff0c;相当于页面的子页面&#xff0c;它的结构和外部网页的结构完全…

6、聊聊cors漏洞

文章目录 1、小结1.1、存在漏洞的情况&#xff1a;1.2、常见的cors设置&#xff08;php举例&#xff09; 2、漏洞复现2.1、无需cookie2.2、需要cookie2.3、需要cookie的方式利用限制 3、补充与疑惑 1、小结 cors漏洞在20230404基本无了 估计很多乙方工作得同学都拿这个漏洞凑…

jmeter 生成html报告及解读

当前版本&#xff1a; jmeter 5.6.3mysql 5.7.39 简介 JMeter 支持在测试完成后自动生成报告&#xff0c;也支持使用结果数据文件转换成html报告&#xff08;使用 -l 文件.jtl&#xff09;。本篇文章主要介绍如何生成报告&#xff0c;以及报告的基本解读。 文章目录如下 1. 生…

06. Nginx进阶-Nginx代理服务

proxy代理功能 正向代理 什么是正向代理&#xff1f; 正向代理&#xff08;forward proxy&#xff09;&#xff0c;一个位于客户端和原始服务器之间的服务器。 工作原理 为了从原始服务器获取内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff08;即原始服务器…

window10 安装配置docker

前言&#xff08;重要&#xff09;&#xff1a;确认window10版本已经更新到最新版 随着时间推移&#xff0c;docker对window版本的支持也在变&#xff0c;截至2024年3月份&#xff0c;支持win10最低版本号&#xff1a;22H2,操作系统最低版本&#xff1a;19045.2965&#xff0c…

基于springboot+vue的新闻资讯系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

科技云报道:阿里云降价,京东云跟进,谁能打赢云计算价格战?

科技云报道原创。 就在大家还在回味2月29日阿里云发布“史上最大降价”的惊喜时&#xff0c;京东云连夜发布降价消息&#xff0c;成为第一家跟进的云服务商&#xff0c;其“随便降&#xff0c;比到底&#xff01;”的口号&#xff0c;颇有对垒的意味&#xff0c;直接吹响了云计…

Python采集学习笔记-request的get请求和post请求

使用http://httpbin.org测试,一个简单的 HTTP 请求和响应服务。(需联网)1.导入requests包 import requests 2.测试get请求 url http://httpbin.org/get par {key1: value1, key2: value2} # 不带参数请求 r1 requests.get(url) # 带参数请求 r2 requests.get(url, paramspa…