精华内容
下载资源
问答
  • 信息隐藏技术

    2021-06-02 21:45:34
    显而易见,数字水印是数字化的多媒体作品版权保护的关键技术之一,也是信息隐藏的重要分支。 基本原理: 7. 隐通道技术: 概念: 分类: 根据隐通道的形成,隐通道可分为: 存储隐通道(storage covert channels) ...
    • 信息隐藏(Information Hiding)作为一门新兴的交叉学科,伴随着信息和网络技术的飞速发展,在隐蔽通信、数字版权保护等方面起着越来越重要的作用。信息隐藏是将秘密信息隐藏在另一非机密的载体信息中,通过公共信道进行传递。秘密信息被隐藏后,攻击者无法判断载体信息中是否隐藏了秘密信息,也无法从载体信息中提取或去除所隐藏的秘密信息。信息隐藏技术研究的内容包括信息隐藏算法、数字水印、隐通道技术和匿名通信技术等。

    1. 传统的信息隐藏技术 :

    1. 技术性的隐写术——隐形墨水、录音回声等
    2. 语言学中的隐写术——藏头诗等
    3. 用于版权保护的隐写术——水印等

    2. 信息隐藏技术主要由下述两部分组成:

    • (1) 信息嵌入算法(编码器),它利用密钥来实现秘密信息的隐藏。
    • (2) 信息提取算法(检测器),它利用密钥从隐秘载体中检测并恢复出秘密信息。在密钥未知的前提下,第三者很难从隐秘载体中得到或删除甚至发现秘密信息。

     

     3. 信息隐藏的分类:

     法比安对信息隐藏的分类:

     根据秘钥的不同,信息隐藏可以分为三类:

     

    4. 信息隐藏的特性:

     

    与传统的加密方式不同的是,信息隐藏的目的在于保证隐藏数据不被未授权的第三方探知和侵犯,保证隐藏的信息在经历各种环境变故和操作之后不受破坏。因此,信息隐藏技术必须考虑正常的信息操作造成的威胁,使秘密信息对正常的数据操作,如通常的信号变换或数据压缩等操作具有免疫能力。根据信息隐藏的目的和技术要求,它存在以下5个特性。

    • (1) 安全性(security)。衡量一个信息隐藏系统的安全性,要从系统自身算法的安全性和可能受到的攻击两方面来进行分析。攻破一个信息隐藏系统可分为3个层次:证明隐藏信息的存在、提取隐藏信息和破坏隐藏信息。如果一个攻击者能够证明一个隐藏信息的存在,那么这个系统就已经不安全了。安全性是指信息隐藏算法有较强的抗攻击能力,它能够承受一定的人为的攻击而使隐藏信息不会被破坏。
    • (2) 鲁棒性(robustness)。除了主动攻击者对伪装对象的破坏以外,伪装对象在传递过程中也可能受到非恶意的修改,如图像传输时,为了适应信息的带宽,需要对图像进行压缩编码,还可能会对图像进行平滑、滤波和变换处理,声音的滤波、多媒体信号的格式转换等,这些正常的处理都有可能导致隐藏信息的丢失。信息隐藏系统的鲁棒性是指抗拒因伪装对象的某种改动而导致隐藏信息丢失的能力。所谓改动,包括传输过程中的信道噪声、滤波操作、重采样、有损编码压缩、D/A或A/D转换等。
    • (3) 不可检测性(undetectability)。不可检测性是指隐蔽载体与原始载体具有一致的特性,如具有一致的统计噪声分布,以便使非法拦截者无法判断是否藏有隐秘信息。
    • (4) 透明性(invisibility)。透明性是指利用人类视觉系统或听觉系统属性,经过一系列隐藏处理,目标数据必须没有明显的降质现象,而隐藏的数据无法被看见或听见。
    • (5) 自恢复性(self-recovery)。经过一些操作或变换后,可能使原图产生较大的破坏,如果只从留下的片段数据仍能恢复隐藏信号,而且恢复过程不需要宿主信号,这就是所谓的自恢复性。

     5. 信息隐藏的算法:

    根据载体的不同,信息隐藏可以分为图像、视频、音频、文本和其他各类数据的信息隐藏。在不同的载体中,信息隐藏的方法有所不同,需要根据载体的特征选择合适的隐藏算法。例如,图像、视频和音频中的信息隐藏利用了人的感官对于这些载体的冗余度来隐藏信息;而文本或其他各类数据需要从另外一些角度来设计隐藏方案。因此,一种很自然的想法是用秘密信息替代伪装载体中的冗余部分,替换技术是最直观的一种隐藏算法,也称为空间域算法。除此之外,对图像进行变换也是信息隐藏常用的一种手段,称为变换域算法。

    1. 图像是由很多像素点组成的,对二值图像来说,每个像素点用八位来表示,将像素最低位替换成秘密信息,人眼难以察觉。
    2. 空间域算法
    3.  变换(频)域算法:空间域算法的最大缺点是鲁棒性差,很难抵抗包括有损压缩、低通滤波等在内的各种攻击。另外,空间域中信息隐藏算法只能嵌人很小的数据量。图像的频域算法是指对图像数据进行某种变换,这种方法可以嵌人大量的比特而不引起可察觉的降质,当选择改变中频或低频分量(DCT变换除去直流分量)来嵌人信息时,健壮性可以大大提高。常用的频域信息隐藏算法有DFT(离散傅里叶变换) .DCT(离散余弦变换)和DWT(离散小波变换)。
       

     6. 数字水印:

     数字水印类似于信息隐藏,它也是在数字化的信息载体(指多媒体作品)中嵌人不明显的记号(也称为标识或水印)隐藏起来,被嵌人的信息包括作品的版权所有者、发行者、购买者、作者的序列号、日期和有特殊意义的文本等,但目的不是为了隐藏或传递这些信息,而是在发现盗版或发生知识产权纠纷时,用来证明数字作品的来源、版本、原作者、拥有者、发行人及合法使用人等。通常被嵌入的标识是不可见或不可观察的,它与源数据紧密结合并隐藏其中,成为源数据不可分离的一部分,并可以经历一些不破坏源数据的使用价值的操作而存活下来。这样的标识可以通过计算机操作被检测或者被提取出来。显而易见,数字水印是数字化的多媒体作品版权保护的关键技术之一,也是信息隐藏的重要分支。

     基本原理:

     7. 隐通道技术:

     概念:

     

     

     

     分类:

    根据隐通道的形成,隐通道可分为:

    • 存储隐通道(storage covert channels)
    • 时间隐通道( timing covert channels);

    根据隐通道是否存在噪声,隐通道可分为:

    • 噪声隐通道(noisycovert channels)
    • 无噪声隐通道(noiselesscovert channels);

    根据隐通道所涉及的同步变量或信息的个数,隐通道可分为:

    • 聚集隐通道(aggregated covert channels)
    • 和非聚集隐通道( noaggregated covert channels)
       

    隐通道分析方法:

    1. 信息流分析方法
    2. 非干扰分析方法
    3. 共享资源矩阵法

    8. 匿名通信技术:

    通俗地讲,匿名通信就是指不能确定通信方身份(包括双方的通信关系)的通信技术,它保护通信实体的身份。严格地讲,匿名通信是指通过一定的方法将业务流中的通信关系加以隐藏,使窃听者无法直接获知或推知双方的通信关系或通信双方身份的一种通信技术。匿名通信的重要目的就是隐藏通信双方的身份或通信关系,从而实现对网络用户个人通信隐私及对涉密通信的更好的保护。
     

    分类:

     

    信息安全与技术(第二版)

    展开全文
  • 信息隐藏原理及应用

    2021-07-27 10:31:36
    信息隐藏原理及应用》是2011年8月5日清华大学出版社出版的图书,作者是葛秀慧。[1]本书可以作为计算机应用、网络工程、通信与信息系统、信号与处理、信息安全与密码学、电子商务专业的本科生和研究生的教材,也可...

    《信息隐藏原理及应用》是2011年8月5日清华大学出版社出版的图书,作者是葛秀慧。[1]

    本书可以作为计算机应用、网络工程、通信与信息系统、信号与处理、信息安全与密码学、电子商务专业的本科生和研究生的教材,也可供从事信息安全研究及应用的学者、技术人员参考。

    书    名

    信息隐藏原理及应用

    作    者

    葛秀慧

    出版社

    出版时间

    2011年8月5日定    价

    18 元

    开    本

    16 开

    装    帧

    平装

    ISBN

    9787302183242

    信息隐藏原理及应用内容简介

    编辑

    语音

    《信息隐藏原理及应用》全面系统地论述了信息隐藏的概念、分类、应用、理论与原理。书中重点介绍了信息隐藏的基本原理,并分析了与其相关的典型算法,以丰富的实例进行说明,同时提供了部分源代码。另外还详细讨论了数字水印技术与算法,探讨了隐写分析与隐蔽通信。

    信息隐藏原理及应用图书前言

    编辑

    语音

    信息是人类社会和国家发展的重要战略资源。随着科学技术的快速发展,传统媒体内容正在向数字化转变。数据的交换与传输也变得更加快捷。但随之而来的日益严重的知识产权侵犯行为和基于加密的安全措施面临的严峻挑战,使得信息隐藏技术重新焕发活力。

    信息隐藏是与数学、密码学、信息论、计算机视觉以及其他计算机应用技术等多学科交叉的学科,是各国研究者所关注和研究的热点。在信息隐藏研究中,可以分为基础理论研究、应用基础研究和应用研究。其中基础理论研究是建立图像信息隐藏的理论框架和若干理论模型,解决安全性度量、通信量分析等基本理论问题,以揭示信息隐藏中若干基本矛盾。信息隐藏的应用基础研究主要针对典型应用需求,研究各种信息隐藏算法和评估体系。信息隐藏的应用研究以图像信息隐藏技术的实用化为目的,研究针对各种应用的实用系统。

    信息隐藏利用人类感知及数字媒体自身的冗余,将秘密信息嵌入到载体中,以对载体的使用进行跟踪,从而达到版权保护、完整性认证等目的。作为一门迅速发展的新兴交叉学科,开展其理论与关键技术的研究,具有巨大的军事和经济价值。计算机技术的发展日新月异,信息隐藏技术也不例外,还会不断涌现出新算法、新应用以及新的发展思路。

    本书旨在向读者介绍这一充满活力的领域中的基本理论原理及典型算法,并介绍了三个主要分支的研究情况,以期起到抛砖引玉的作用。

    本书共分8章。第1章介绍信息隐藏技术应用分类,以及数字水印及隐写术在信息安全中的地位。第2章介绍信息隐藏的基本原理并讨论隐写系统的分类及术语。第3章讨论了信息隐藏的预处理,主要涉及相关加密领域的算法及知识。第4章介绍隐写术的模型及数字水印模型。第5章分析典型的信息隐藏算法,包括位平面算法、调色板算法、空域算法及频域算法,同时还讨论融合算法。第6章重点介绍数字水印技术及相关典型算法与技术。第7章讨论隐蔽通信,主要探讨TCP/IP中的隐蔽通信。第8章介绍隐写分析技术及相应评价指标,并分析了通用原形系统的相应算法。

    对于这一领域,作者的研究可能只是以管窥豹,仅见其一斑,肯定存在不足之处,希望研究这一领域的同行给予批评和指正。[2]

    信息隐藏原理及应用目录

    编辑

    语音

    第1章简介

    1.1引言

    1.2隐写术概述

    1.3数字水印概述

    1.4隐蔽通信概述

    1.5信息隐藏的应用

    1.6隐写算法综述

    1.7隐写分析概述

    1.8信息隐藏当前研究现状与存在问题

    1.9本章小结

    1.10因特网资源

    1.11复习题

    第2章信息隐藏基本原理

    2.1信息隐藏的基本原理与分类

    2.1.1纯隐写术、密钥隐写术和公钥隐写术

    2.1.2文本、音频、图像的隐写

    2.1.3音频中的隐写

    2.2信息隐藏的主要术语

    2.3数字水印系统的构成与分类

    2.3.1数字水印系统

    2.3.2数字水印、隐写术与加密术的区别

    2.3.3数字水印的分类

    2.3.4数字水印的特性与术语

    2.4本章小结

    2.5复习题

    第3章信息隐藏的预处理

    3.1加密的预处理

    3.1.2RC4流密码

    3.2简单的图像信息伪装技术

    3.3置乱

    3.4混沌

    3.5本章小结

    3.6复习题

    第4章信息隐藏模型

    4.1隐写术模型分析

    4.1.1Simmons模型分析

    4.1.2通信系统模型分析

    4.1.3隐写术的安全模型分析

    4.1.4基于通信的水印模型

    4.2数字水印空间模型

    4.3感知模型

    4.3.1人类感知

    4.3.2评价的基本指标

    4.3.3Watson感知模型

    4.4本章小结

    4.5复习题

    第5章信息隐藏算法

    5.1信息隐藏算法概述

    5.2位平面算法

    5.2.1位平面算法概述

    5.2.2位平面算法实现

    5.2.3嵌入算法步骤和程序

    5.2.4实验和实验结果分析

    5.3调色板算法

    5.3.1调色板算法原理

    5.3.2调色板信息隐藏算法实现

    5.3.3调色板信息隐藏算法容量实验

    5.4空域信息隐藏算法

    5.4.1最低有效位算法原理

    5.4.2最低有效位算法实验

    5.4.3HideandSeek隐写软件分析与实验

    5.5频域变换信息隐藏算法

    5.5.1离散傅里叶变换DFT

    5.5.2离散余弦变换DCT

    5.6小波域信息隐藏算法

    5.6.1离散小波变换DwT

    5.6.2小波变换实现信息隐藏

    5.7统计算法

    5.8图像融合算法

    5.9本章小结

    5.10因特网资源

    5.11复习题

    第6章数字水印

    6.1数字水印算法概述

    6.2空域数字水印算法

    6.2.1最低有效位算法

    6.2.2Patchwork算法

    6.3变换域算法

    6.3.1DCT算法

    6.3.2DWT算法

    6.4可见与不可见数字水印算法

    6.5可逆水印概述

    6.5.1可逆数字水印现有算法

    6.5.2基于纠错编码的差值扩展可逆数字水印

    6.6免疫数字水印算法

    6.6.1SRlw形式化描述

    6.6.2SRlw实现方法

    6.6.3SRlw安全性分析及评价标准

    6.7多重数字水印

    6.7.1多重数字水印概述

    6.7.2鲁棒性和脆弱性相结合的双重数字水印

    6.7.3基于CDMA的多重数字水印算法

    6.8本章小结

    6.9复习题

    第7章隐蔽通信

    7.1隐蔽通信概述

    7.2隐蔽通道

    7.3TCP隐蔽通信

    7.3.1TCP协议概述

    7.3.2TCP隐蔽通信的实现

    7.4IGMP中的隐蔽通信

    7.5IP中的隐蔽通信

    7.6本章小结

    7.7复习题

    第8章隐写分析技术

    8.1隐写分析概述

    8.1.1隐写分析定义

    8.1.2隐写分析分类

    8.2隐写分析评价指标

    8.3隐写分析通用原型系统

    8.4隐写分析算法

    8.4.1专用隐写分析算法介绍

    8.4.2通用隐写分析算法介绍

    8.4.3GPC隐写分析法

    8.5本章小结

    8.6复习题

    参考文献[2]

    ……

    词条图册

    更多图册

    参考资料

    1.

    信息隐藏原理及应用

    .豆瓣网[引用日期2017-08-30]

    2.

    信息隐藏原理及应用

    .清华大学出版社.2011-08-05[引用日期2013-09-21]

    展开全文
  • 信息隐藏的原理与应用

    千次阅读 2021-12-04 12:13:27
    概述 随着数字媒体和互联网的普及,数字媒体产品的版权保护已成为当前迫切需要解决的问题。信息隐藏技术能为数字信息所有者的权益提供有力的保护。...加密技术与信息隐藏技术是确保数字信息安全的种主要技术。但是传

    目录

    概述

    加密技术与信息隐藏技术的区别:

    信息隐藏的分类:

     隐写技术:

    数字水印技术:

    信息隐藏的应用:

    1保密通信

    所有权认定和版权保护: 

    多媒体数据认证和完整性保护:

    数字水印技术: 

    数字水印的作用:


    概述

    随着数字媒体和互联网的普及,数字媒体产品的版权保护已成为当前迫切需要解决的问题。信息隐藏技术能为数字信息所有者的权益提供有力的保护。

    值作数字媒体,需要资金,创意,时间等等。

    传播数字媒体,成本基本为0

    信息隐藏技术利用人类感觉器官对数字信号的感觉,将一个消息隐藏在另一个消息之中,实现隐蔽通信或隐蔽标识。隐藏了秘密信息的存在,表面上看起来与一般的非保密信息没有区别,因而十分容易躲过攻击者的破解。

    加密技术与信息隐藏技术的区别:

    加密技术与信息隐藏技术是确保数字信息安全的两种主要技术。但是传统的加密技术存在问题:保护秘密信息时容易遭受攻击。

    信息隐藏通过秘密信息永久地隐藏在公开的媒体信息中,达到证实该媒体信息的所有权归属和数据完整性或传递秘密信息的目的。主要目的并不是限制对信息的访问,而是确保宿主信息(非秘密信息)中隐藏的秘密信息不被改变或删除,从而在必要时提供有效证明信息。它把秘密信息隐藏在可以公开的信息中,使攻击者难以知道秘密信息的存在。

    信息隐藏的原理:

    具体过程如下:在密钥的控制下,通过嵌入算法将秘密信息隐藏在公开信息中,隐蔽宿主(隐藏有秘密消息的公开信息)通过通信信道传递,接收方的检测器利用密钥从隐蔽宿主中恢复/检测出秘密消息。

    信息隐藏的分类:

    根据不同应用场合的需求,信息隐藏技术分为隐写技术和数字水印技术两个分支。根据信息隐藏协议的不同,信息隐藏技术可以分为无密钥信息隐藏,私钥信息隐藏和公钥信息隐藏。

     隐写技术:

    又分为传统物理隐写和现代隐写技术。传统的物理隐写技术最典型的方法是利用化学药水的隐写。现代隐写技术其基本原理是利用人类听觉,视觉系统分别率的限制,以数字媒体信息为载体,将秘密信息隐藏在载体中,从而掩盖了秘密信息的存在,如果没有密钥根本就不可能存取其中信息。

    数字水印技术:

     并不是控制信息被使用,而是通过信息隐藏技术,为数字媒体信息打上一个永久性的标准,研究的重点是隐藏标志的健壮性。无论如何传播,标志不会消失。数字水印可望在技术上为数字信息及其所有者的权益提供有效保护

    信息隐藏的应用:

    1保密通信

    密码技术作为传统保密通信的主要手段在未来还将扮演重要角色,但是单独采用密码技术存在以下问题。

    1密码算法是依赖于当前计算机不可行的数学问题。密码算法的使用始终存在被破译的潜在危险。

    2加密只是秘密信息不可读,掩盖的是秘密信息本身,并为隐藏通信存在的事实。虽然敌对方暂时尚未有破译手段,但却容易加以破坏。

    信息隐藏通信原理:先进行常规加密,再对密文进行信息隐藏

    除了传统的加密技术外,还提供了另外两层保护:数据隐藏的伪装作用和隐藏数据检测/提取的困难性。在信道传输的海量信号中判断是否有秘密通信的存在是一件难度很大的工作。

    所有权认定和版权保护: 

    应用数字水印可以做到:

    1辨别数字媒体信息所有权。可在数字媒体传播前嵌入水印,在必要时可以对有争议,可疑的数字媒体进行测试,证实数字媒体的所有权。

    2数字媒体产品的数字指纹。可以在数字产品流通前嵌入数字指纹,从而实现对产品的传播跟踪。如果进一步采用公钥信息隐藏技术,合法用户还可以确认数字媒体产品的合法来源。

    3防非法复制。录放产品时可以先检测有没有水印存在。

    多媒体数据认证和完整性保护:

    传统的数据认证和完整性证明是采用数字签名技术来解决。

    在数字媒体应用场合,数字签名技术有时会带来不便。

    1数字签名是作为原始数据的附加进行发送的,二者是截然分开的,给攻击者带来方便。数字水印永久嵌入原始数据中,没有改变信息传输的数据量。

    2很多场合下,数字媒体需要压缩,有时在传播过程中也可能引进干扰,这都导致数字签名失败;而数字水印则有可能区分恶意篡改和正常的变化,从而放宽了限制。

    典型例子:防数据篡改,数字媒体真伪鉴别。 

    在数字媒体中,数据真伪和完整性是由数字水印来实现的。

    数字水印技术: 

    数字式多媒体信息的存储,复制与传播以网络的形式进行,这使得盗版者能以低价传播。

    数字水印技术就是比较热门的数字产品版权保护技术,其目的是鉴别非法盗版。

    原理:

    数字水印是永久镶嵌在其他数据中具有可鉴别性的数字信号或模式,而且不影响宿主数据的可用性。数字水印技术通过一定的算法将一些标志性信号直接嵌入到宿主数据中。

    在水印的嵌入,提取时采用一种密钥甚至几种密钥联合使用。

     依据数字水印的特性,水印可以分为稳健水印和易碎水印。

     对于消息m,它的数字签名形如(m,s)由于s的存在,m的数字签名要比消息m本身大。原始数据消息和加了易碎水印的媒体消息一样大。

    不管可见水印还是不可见水印,都是针对图像水印而言。

    数字水印的作用:

    数字水印已不再有局限于标准版权信息,它在多媒体作品销售,播放和使用的各个环节中都发挥者作用。

    广播检测,版权保护,真伪辨别,交易水印,复制控制

    展开全文
  • 前言:几乎所有的版本控制都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git的分支模型成称为它的“必杀技特性”,也正因为这一特性,使得Git从众多版本控制系统中...

    前言:

    几乎所有的版本控制都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。

    Git的分支模型成称为它的“必杀技特性”,也正因为这一特性,使得Git从众多版本控制系统中脱颖而出。Git处理分支的方式是难以置信的轻量,创建新的分支这一操作是秒级完成的,并且在不同分支之间的切换操作也是一样便捷。

    Git的分支,其实本质上仅仅是指向提交对象的可变指针。Git的默认分支是master。在多次提交操作之后,其实我们已经有一个指向最后那个提交对象的master分支。他会在每次的提交操作中自动向前移动。

    实际工作中我们可能会遇到一个下面这个情况:

    开发某个网站。

    为实现某个新的需求,创建一个分支。

    在这个分支上开展工作。

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

    切换到你的线上分支(production branch)。

    为这个紧急任务新建一个分支,并在其中修复它。

    在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。

    修改后切换回你最初工作的分支上,继续工作。

    关于git的更多介绍,还是移步其官方文档吧!

    博文大纲:

    1、初始化一个目录并声明用户及邮箱地址

    2、创建、快速合并及删除分支

    3、解决分支冲突问题

    4、关闭快速合并

    5、Bug分支

    6、Git分支管理相关命令

    1、初始化一个目录并声明用户及邮箱地址

    [root@git ll]# git init

    [root@git ll]# git config --global user.name admin

    [root@git ll]# git config --global user.email admin@admin.com

    2、创建、快速合并及删除分支

    [root@git ll]# echo "aaaa" > branch.txt

    [root@git ll]# git add branch.txt

    [root@git ll]# git commit -m "第一次提交 From master"

    #创建一个分支并进入新建的分支

    [root@git ll]# git checkout -b dev

    [root@git ll]# git branch #查看当前所在分支

    * dev #星号所在的列就是当前所在分支

    master

    #在dev分支更新文件并提交

    [root@git ll]# echo "bbbb" >> branch.txt

    [root@git ll]# git add *

    [root@git ll]# git commit -m "commit From dev branch"

    [root@git ll]# cat branch.txt #确认当前内容

    aaaa

    bbbb

    [root@git ll]# git checkout master #切换到master分支

    [root@git ll]# cat branch.txt #确认当前内容

    aaaa

    [root@git ll]# git merge dev #合并dev分支

    [root@git ll]# cat branch.txt #再次查看其内容

    aaaa

    bbbb

    [root@git ll]# git log --graph --pretty=oneline --abbrev-commit #查看提交日志

    #可以查看到其提交日志前面的星号是在同列的,这是因为采用的是快速合并的方法(默认)

    #稍后会写下关闭快速合并,然后可以对比该命令查看的结果

    * bc8bd7b commit From dev branch

    * 8bb6874 第一次提交 From master

    [root@git ll]# git branch -d dev #删除dev分支

    3、解决分支冲突问题

    在我们实际工作中会遇到一个分支冲突的问题,就是当你在工作分支dev下对文件内容进行了修改,然后在你提交到版本库前,master分支下的内容已经发生了改变,此时,你dev分支下的内容是比master下的内容要旧,这种情况下进行分支合并,会有一个分支冲突的概念,栗子如下:

    [root@git ll]# cat branch.txt #查看master分支的此文件内容

    aaaa

    [root@git ll]# git checkout -b dev #创建并切换至自己的工作分支

    #对文件内容进行修改并提交到版本库

    [root@git ll]# echo "bbbb" >> branch.txt

    [root@git ll]# git add branch.txt

    [root@git ll]# git commit -m "alter from dev"

    [root@git ll]# cat branch.txt #查看文件内容

    aaaa

    bbbb

    [root@git ll]# git checkout master #切换至master

    [root@git ll]# cat branch.txt #master下的文件内容还是原来的

    aaaa

    #修改master下的文件内容并提交

    [root@git ll]# echo "cccc" >> branch.txt

    [root@git ll]# git add branch.txt

    [root@git ll]# git commit -m "alter from master"

    [root@git ll]# cat branch.txt #此时master下的文件内容如下

    aaaa

    cccc

    #接下来将dev分支进行合并:

    [root@git ll]# git merge dev #返回如下报错信息,说有冲突

    自动合并 branch.txt

    冲突(内容):合并冲突于 branch.txt

    自动合并失败,修正冲突然后提交修正的结果。

    #解决合并冲突

    #其实有上述报错后,dev分支下的内容已经存在了master目录下的文件中,只是没有提交而已,提交即可

    #但是工作中不建议直接提交,因为内容有些特殊的地方

    [root@git ll]# vim branch.txt #此时文件的内容如下

    aaaa

    <<<<<<< HEAD

    cccc

    =======

    bbbb

    >>>>>>> dev

    [root@git ll]# cat branch.txt #将冲突报错产生的特殊符号删除再提交

    aaaa

    cccc

    bbbb

    [root@git ll]# git add branch.txt

    [root@git ll]# git commit -m "冲突已解决"

    [root@git ll]# git log --graph --pretty=oneline --abbrev-commit #查看分支合并情况

    * da2bcdb 冲突已解决

    |\

    | * 6abac82 alter from dev

    * | 2b5d2f0 alter from master

    |/

    * ef014ec alter from master

    4、关闭快速合并

    在上面说到,在查看git版本的提交历史时,其分支结构表现的不是那么直观,那是因为默认开启了快速合并的选项,这里写下如何关闭快速合并。

    #进入分支,修改文件内容,并提交

    [root@git ll]# git checkout -b dev

    [root@git ll]# echo "ffff" >> branch.txt

    [root@git ll]# git add branch.txt

    [root@git ll]# git commit -m "关闭快速合并"

    #切换至master分支,进行合并

    [root@git ll]# git checkout master

    [root@git ll]# git merge --no-ff -m "分支合并说明" dev #选项“--no--ff”就是关闭快速合并

    [root@git ll]# git log --graph --pretty=oneline --abbrev-commit

    #再次查看提交日志,

    * 38c4fad Merge branch 'dev'

    |\

    | * 9233297 关闭快速合并

    |/

    * 7e0ea1b 冲突已解决 #从这里开始向上看,可以看到是经过一个分支才提交的

    |\

    | * f9180c9 alter from dev

    * | 107081a alter from branch/bug

    |/

    #以下是最初没有关闭快速合并的分支合并操作,可以看到只有一列星号,而不显示分支

    * bc8bd7b commit From dev branch

    * 8bb6874 第一次提交 From master

    [root@git ll]# git branch -d dev #删除dev分支

    5、Bug分支

    开发人员在开发过程中,bug就像家常便饭一样,有了bug就要修复,在git中,由于分支是强大的,所以都可以通过一个新的临时分支来修复bug,修复后,分支合并,然后将临时分支删除。

    当我们接到一个修改bug的任务后,很自然的想要创建一个分支来修复它,但是当前正在进行的工作进行到一半,还无法提交,但又需要马上修复bug,此时,可以通过git提供的stash功能,可以把当前工作区“储藏”起来,等以后恢复现场后继续工作。

    工作进行到一半时工作区的状态如下:

    [root@git ll]# cat branch.txt

    aaaa

    cccc

    bbbb

    [root@git ll]# echo "dddd" >> branch.txt

    [root@git ll]# git status #提示修改但是尚未提交

    # 位于分支 dev

    # 尚未暂存以备提交的变更:

    # (使用 "git add ..." 更新要提交的内容)

    # (使用 "git checkout -- ..." 丢弃工作区的改动)

    #

    # 修改: branch.txt

    #

    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

    将此时的工作区隐藏起来

    [root@git ll]# git stash #就是这条命令,可以将当前工作区隐藏

    [root@git ll]# git status #再次查看当前工作区,就是干净的了

    # 位于分支 dev

    无文件要提交,干净的工作区

    [root@git ll]# cat branch.txt #文件也没有我们新加的内容

    aaaa

    cccc

    bbbb

    假设在master分支上修复bug

    #切换至master分支并进入bug分支修改

    [root@git ll]# git checkout master

    [root@git ll]# git checkout -b bug

    [root@git ll]# echo "eeee" >> branch.txt

    [root@git ll]# git add branch.txt

    [root@git ll]# git commit -m "alter from bug"

    #切换至master分支合并修改后的bug分支

    [root@git ll]# git checkout master

    [root@git ll]# git merge bug

    [root@git ll]# cat branch.txt #合并后的文件内容如下

    aaaa

    cccc

    bbbb

    eeee

    [root@git ll]# git branch -d bug #删除bug分支

    #回到dev分支恢复之前修改的内容继续自己的工作

    #有两种恢复方法:

    #一是使用 git stash apply 恢复,但是恢复后,stash 内容并不删除,需要用 git stash drop 来删除;

    #另一种方式是用 git stash pop,恢复的同时把 stash 内容也删了;这里我采用第二种方法

    [root@git ll]# git stash pop #恢复存储区的内容

    [root@git ll]# cat branch.txt #我们之前的内容又回来了

    aaaa

    cccc

    bbbb

    dddd

    #最后工作完成,在合并dev分支的时候,也会有分支冲突,可以参考前面解决分支冲突的方法

    6、Git分支管理相关命令

    [root@git ll]# git checkout -b ops #创建ops分支并切换到ops分支

    [root@git ll]# git checkout master #切换至master分支

    [root@git ll]# git merge dev #快速合并dev分区到当前分支

    [root@git ll]# git branch -d ui #删除ui分支

    [root@git ll]# git branch #查看所在分支(用星号表示所在分支)

    [root@git ll]# git log --graph --pretty=oneline --abbrev-commit

    #查看分支合并图

    [root@git ll]# git merge --no-ff -m "合并时提交信息" dev #不使用快速合并分支

    [root@git ll]# git stash #将当前版本库的状态临时存储

    [root@git ll]# git stash pop #恢复并删除临时存储的信息

    [root@git ll]# git stash apply #恢复临时存储信息,但不删除信息

    [root@git ll]# git stash drop #删除临时存储中的信息

    [root@git ll]# git stash show #查看临时存储的信息

    [root@git ll]# git branch -D dev #强制删除一个分支

    [root@git ll]# git remote #查看当前版本库是否属于远程版本库

    [root@git ll]# git remote -v #查看远程版本库的详细信息

    [root@git ll]# git push origin dev #将本地dev分支推送到远程仓库

    [root@git ll]# git checkout -b dev origin/dev #创建本地dev分支并关联到远程仓库的dev分支

    [root@git ll]# git pull #抓取远程分支,一般用于解决冲突

    [root@git ll]# git branch --set-upstream-to=origin/dev dev #将本地分支dev关联到远程仓库的dev分支

    展开全文
  • 这是解决上述问题的一个方法,但背后同样隐藏很多问题: 多个 repo 的状态是不好同步的,比如没办法快速 cherry-pick, 一个 repo checkout 的分支,另外一个 repo 需要重新 checkout git history/log 是重复的,当...
  • 本站文章除注明转载外,均为本站原创或者翻译。...本文标题:Git查看、删除、重命名远程分支和tag2015-06-15:加入姊妹篇;2013-11-06:加入重命名远程分支的内容;2013-01-09:加入删除远程tag的内容。这篇...
  • 1.远程拉取gitlab 工程分支,并在本地建立分支具体过程新建一个空文件初始化 git init自己要与origin master建立连接(下划线远程仓库链接)git remote add origin http://192.168.9.10:8888/root/game-of-life.git把...
  • git branch不显示分支

    2021-08-10 17:25:40
    本地没有指向分支 解决方法: #如果没配置git,先把git配置了 git config --global user.name your_name git config user.email your_email git init #可以之后,commit一次 git commit -m “test” 然后就能看到了
  • 1.git如何同步本地分支与远程origin的分支问题场景1:同事A创建了本地分支branchA并push到了远程->同事B在本地拉取(git fetch)了和远程branchA同步的本地分支branchA->同事A开发完成将远程分支branchA删除...
  • Git分支创建与合并

    2020-12-22 20:19:01
    编辑推荐:本文来自cnblogs,介绍了创建git工程,开发过程,分支结构,合并冲突解决等知识。在实际开发中,我们应该按照几个基本原则进行分支管理:首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时...
  • gitlab 和gitHub一样,配置了ssh就不需要再使用账号和密码,合并分支的时候或者自动同步的时候都比较方便配置好ssh后(这一步,网络上也有很多的教材可以参考)0: git init (如果是要从远程仓库中来去项目,这里就不...
  • 【1】建立一个本地仓库(mkdir hello)此时hello为一个文件夹,因此首先使用git init,对仓库进行初始化可看到.git隐藏文件,表示初始化成功【2】将源码放入本地仓库(源码将围绕git工具所视的文件状态展开)加入到本地...
  • 本地一个长期更新的项目,git log突然报错:xxx@yyy:~/android/project/kernel/.git$ git log .fatal: your current branch 'project-dev' does not have any ...如果git branch -v, 发现本地分支信息消失.如果gi...
  • $ git checkout -b dev 创建dev分支,然后切换到dev分支 == 等价于 下面条命令 $ git branch dev //创建分支----创建开发分支 , $ git checkout dev// 切换分支 --- 切换至开发分支 //作用是checkout远程的...
  • windows系统很好用使用的人很多很多,但也超容易中毒,下面我来给大家讲win2003/2008下建立隐藏系统用户与查看及删除方法,希望对大家所有帮助,建立隐藏系统用户先做准备工作,新建一个用户,名为sxitn$(加上$符号...
  • gitee将代码上传到远程分支仓库1.关于gitee的心声2.关于gitee的基本使用2.1新建git仓库2.2创建git连接2.3 git仓库分支的切换3 将代码上传到远程分支4.其他方法 1.关于gitee的心声     首先,如果你是一位正在...
  • 分支语句和循环语句

    千次阅读 2021-11-19 12:40:04
    1、分支语句:if和switch 2、循环语句:while循环、for循环和do while循环 3、go to语句 1.什么是语句? C语句可分为以下几类; ①表达式语句 ②函数调用语句 ③控制语句 ④复合语句 ⑤空语句 1、对于①...
  • 怎么将网站的php版本信息隐藏起来_后端开发当我们把网站上线之后,我们可以通过curl的如下命令显示指定网站的头信息。python通过缩进来判断操作是否在分支结构中。 (推荐学习:Python视频教程)Python中的缩进...
  • 写着不需要上传到git仓库的文件夹名字2、readme.md3、拷贝LICENSE,开源协议4、创建本地仓储* 使用git init ,此时项目中会新增一个隐藏的.git文件* git status 查看文件状态(标红的都是未提交)* git add ....
  • Git 分支操作

    2021-07-24 11:48:38
    终端执行 ssh-keygen 命令按几次回车生成公私钥,公私钥存放在主目录下的隐藏目录 .ssh 中的个文件中: 将 ~/.ssh/id_rsa.pub 文件中的公钥内容复制出来,实验环境中可以使用右侧工具栏中的剪切板复制: 然后在 ...
  • github在2020/10/1宣布上的所有新库都将用中性词「main」命名,取代原来的「master」,如果我们通过git push -u grigin master 方法上传仓库...1.git init //工作空间创建.git文件夹(默认隐藏了该文件夹) 2.git add .
  • 工作区有个隐藏目录“.git”,这个不算工作区,而是Git的版本库,Git的版本库存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们主动创建的第一个分支master,以及指向master的一个...
  • 在 dev 分支开发需求过程中,突然插入 另一个紧急需求,新建 fix 分支处理紧急需求,切换到fix分支后,发现 dev分支中更改的内容也存在。 问题原因: 如果当前分支所做的修改没有提交的话去其他分支也会看到相同的...
  • 在实际开发中可能也经常会遇到写完代码后提交到远程分支但发现写的提交信息有误,不符合规范。由于自己的gitee账号可能没有修改提交记录的权限。因此最佳的解决方法是,撤销本地分支当前的提交记录,将代码回滚到上...
  • 切换到 hotfix 或 feature, 测试就会中断 项目非常,频繁的切换索引,成本非常高 有几年前 release 的旧版本,设置和当前不一样,IDE restructure 适配切换也会带来很的开销 切换分支,需要重新设置相应的环境...
  • git – 存储本地分支的文件在哪里

    千次阅读 2020-12-20 13:25:45
    在项目根目录中有一个隐藏的文件夹.git(当你运行git init或者初始化一个存储库时它会被创建),其中git存储了所有的“魔法位”.它并不是非常神奇 – 有一个HEAD文本文件,说明“head”所在的位置(例如当前检出分支或...
  • github在2020/10/1宣布上的所有新库都将用中性词【main】命名,取代原来的【master】,如果我们通过git push -u grigin master 方法上传...个方法: 方法1.为保持一致性,可将本地git init的时候默认分支修改为mai

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,316
精华内容 24,526
关键字:

信息隐藏两大分支