关于git分支

1.关于git分支

git的“分支”乍一听是一个特别容易让人产生错觉的概念,以为它和树枝一样是分叉的枝节,其实Git中的分支本质上是个指向commit对象的指针,每次commit,git都把它们串成一条时间线,这条时间线就是一个分支。

2.直接切换分支的两种结果

一般我们在切换分支前,最好先提交commit(或者储藏stash)下在当前分支的修改。 多数情况我们没有提交(或者储藏)当前分支的修改是切换不了分支的,也有一些特殊情况下不提交修改依然可以成功切换分支。

当分支a和分支b在同一提交点时,(可能是刚互相合并完成也可能是a分支是基于b分支的当前提交点新建的),即使在某一个分支下修改了内容(修改文件、创建文件、删除文件)后不提交依然能成功切换分支(刚刚修改的内容会被带到新切换到的分支),于此同时git会提示:

bogon:weddingH5 jj$ git checkout a
D       css/index.css(被删除的文件)
M       index.html(被修改的文件)
Switched to branch 'a'
复制代码

此时你可以在随意切换a和b分支,并可选择在a和b任一分支上提交现在的修改。

否则会切换分支失败,与此同时git会提示:

error: Your local changes to the following files would be overwritten by checkout:index.html(你修改的文件)
Please commit your changes or stash them before you switch     branches.
复制代码

3.切换分支先提交commit

4.切换分支前先储藏stash

使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用’git stash’就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用’git stash apply’将以前一半的工作应用回来。当你多次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,’git stash list’命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用’git stash apply stash@{1}’就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用’git stash clear’来将栈清空。

介绍地址

需要提醒的是,你可以在某一分支上储藏,然后在任一分支上应用这些储藏。git stash apply会默认应用当前储藏列表(用git stash list查看)中最新的储藏,要想指定应用某一储藏,可以用类似git stash apply stash@{2} 这样的命令。

5.什么时候会出现合并冲突

廖雪峰老师的网站地址 当两个分支出现下图这种情况时,合并两个分支可能会发生冲突

图示这种情况代表两个分支指针指向了两个已经更新过的提交对象(这里mater和feature1都在原来的基础上提交修改了一次,其实和次数无关,不要被误导),此时合并分支时,只要合并前两个分支中最新的两次提交包含了同一个文件中同一个位置的修改则会出现合并冲突,否则如果不是同一个位置,即使是同一个文件也不会出现冲突。

如何解决冲突? 只能手动解决冲突,如果涉及到其他开发者,最好和其他开发者当面商量后一起解决。

6. git tag

6.1 git tag是什么

tag , 翻译过来是标签的意思,顾名思义,标签是为了标记某种事物。 tag 是 Git 版本库的一个快照,指向某个 commit 的指针。

6.2 使用git tag的好处

tag 的存在,是因为我们需要这种标记的功能。目前的项目开发中,当发布版本时 tag 就派上用场了。例如 v1.0.1,v1.0.2… 另外,git 提供了 tag 的增删改查一系列操作,在 tag 的使用上,可谓非常之方便。

6.3 tag 和 branch 的区别以及使用场景

想到这里,你可能觉得 tag 和 branch 有点相似。没错,的确是有点像,但是它们的职责分工和本质都是不同的。 **tag 对应某次 commit, 是一个点,是不可移动的。 ** branch 对应一系列 commit,是很多commit点连成的一根时间线。

所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。

tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如 已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以 检出 v2.0 的代码作为一个 branch ,然后作为开发分支。

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

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

相关文章

【机器学习经典算法源码分析系列】-- 逻辑回归

1.逻辑回归(Logistic Regression)又常被成为“逻辑斯蒂回归”,实质上是一个二元分类问题。 逻辑回归代价函数: 代价函数导数: Matlab实现: 采用matlab中自带的无约束最小化函数fminunc来代替梯度下降法&…

求特殊自然数

总时间限制: 1000ms 内存限制: 65536kB 描述一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。 输入无。输出三行:第一行是此自然数的十进制表示;第一行是此自然…

ROS——不同版本间ROS进行通信

在相同版本间的ROS进行通信不在赘述了,修改/etc/hosts文件即可。 最近项目遇到在Ubuntu16.04 与Ubuntu18.04两个系统间进行ROS通信,ROS版本分别为Kinetic和Melodic。配置网络后,两边都能够ping通,但是在获取ros数据是&#xff0c…

大数据开发实战:数据流图及相关数据技术

1、大数据流程图 2、大数据各个环节主要技术 2.1、数据处理主要技术 Sqoop:(发音:skup)作为一款开源的离线数据传输工具,主要用于Hadoop(Hive) 与传统数据库(MySql,PostgreSQL)间的数据传递。它…

oracle 中时间类型 date 与 long 互转

我们在保存时间到数据库时,有时候会保存long型的数据,固定长度是13位,是用当前时间减去1970-01-01,再换算成毫秒得到的结果。 但是要考虑到时区问题中国的时区时8区所以时间要加上8小时 oracle中的实现方式: ---------…

Linux对包管理阐述

Centos/Redhat/Fedora的软件包,都是rpm后缀的文件。包管理器rpm(Redhat packages manager) linux的哲学思想是简单命令解决复杂任务,因此每个软件的功能较单一,所以各种包之间有着复杂的依赖关系,为了解决这种可以使用前端工具&am…

跨时钟域电路设计——亚稳态及双锁存器

一、同步电路 定义:电路中所有受时钟控制的单元,全部由一个统一的时钟控制。 优点:在同步设计中,EDA工具可以保证电路系统的时序收敛,避免电路设计中的竞争冒险。 缺点:时钟树综合需要加入大量延迟单元&…

linux setsockopt详解

1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddrTRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已经处于连接状态的soket在调用closes…

[TOOLS] 移动端调试进行时 - whistle

1、本地安装、启动whistle 安装实操请查看官方文档不赘述 复制代码 2、手机设置代理 实操请查看官方文档 !!!注意:代理ip填写whistle右上角online选项中的ip 复制代码 3、whistle上设置对应rules、weinre whistle设置代理(!!!注意支持tunnel协议): rules…

函数动态参数实现format

变量赋值一种是字符串格式化,一种是通过format的方式 1.字符串格式化 s"i am %s,age %d"%(Jasper,23)print(s)打印输出:i am Jasper,age 232.format格式化 s"i am {name},age {age}".format(namejasper,age23)print(s)或 s2"i …

跨时钟域电路设计——单bit信号

前面提到了简单的双电平锁存器,下面是一些单bit同步电路。 一、慢时钟域向快时钟域 边沿检测同步器 将慢时钟域的脉冲搬移并缩小为快时钟域的脉冲。 既可以检测上升沿,也可以检测下降沿。 如上图,慢时钟下一个有效脉冲的最短周期为慢时钟的…

数据同步 rsync+notify架构

rsync 同步命令,非常好用 notify是监控本地文件的变化的 、安装配置 1. 安装rsync,inotify-tools sudo apt-get install rsync inotify-tools 2. 拷贝rsync配置文件 mkdir /etc/rsync cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsync/ 3. 服…

OC_KVC与KVO简单介绍

KVC KVC概述 KVC 即 Key-value coding 键值编码,是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。 KVC案例 interface Person : NSObjectproperty (nonatomic,assign) int age; property (nonatomic,copy)…

C语言100例01 PHP版(练习)

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 代码: 1 for($i1;$i&l…

嵌入式根文件系统制作

1:文件系统分类: 基于flash的文件系统:flash有两种,一种是NOR,另一种NAND。NOR型 FLASH主要用于存放程序。NAND型 FLASH主要用于存放数据。NOR的特点是可在芯片内执行。这样应用程序可以直接在flash内存内运行,不必再把代码读到…

跨时钟域电路设计——结绳法

信号从快时钟域到慢时钟域过渡时,慢时钟可能无法对快时钟变化太快的信号进行采样。 之前的同步器法对两个时钟间的关系有要求,结绳法适用于任何时钟域之间的过渡。 结绳法的原理是将快时钟信号的脉冲周期延长,等到慢时钟周期采样后再“解绳”…

我之理解---计时器setTimeout 和clearTimeout

今天在写个图片切换的问题 有动画滞后的问题,才动手去查setTimeout 和clearTimeout。之前写的图片播放器也有类似的问题,有自动start按钮 和stop按钮, 其他都正常,问题出在每次多次快速的点击start按钮时,图片播放的速…

002服务提供者Eureka

1、POM配置 和普通Spring Boot工程相比&#xff0c;仅仅添加了Eureka、Spring Boot Starter Actuator依赖和Spring Cloud依赖管理 <dependencies><!--添加Eureka Server依赖--><dependency><groupId>org.springframework.cloud</groupId><art…

使用Busybox构造cramfs根文件系统

使用Busybox构造cramfs根文件系统 11.1、下载Busybox&#xff0c;如果系统中没有mkcramfs工具则还要下载mkcramfs压缩工具。本文件系统使用Busybox-1.10.1&#xff0c;cramfs-1.1。压缩文件Busybox-1.10.1.tar.bz2&#xff0c;cramfs-1.1.tar.gz。 22.解压文件&#xff1a; tar…

关于二维码分块上色(彩色二维码)的算法研究

原文:关于二维码分块上色&#xff08;彩色二维码&#xff09;的算法研究众所周知&#xff0c;二维码通常是黑白的&#xff0c;而且是由若干个长方形或正方形小块平铺而成。但从人们的审美角度来看&#xff0c;常见的黑白二维码不免让人审美疲劳。本文试着从分块上色的角度对二维…