Git初学札记(七)————合并分支(merge)

目录

引言

开始Merge

1、History视图

2、Team菜单

3、Git Repositories视图

巧用Git Staging视图

放弃Merging

可能的Merge结果


引言

Git鼓励开发者使用分支来进行程序的开发。但是最终只会有一个版本发行出去,因此,我们需要将开发好的分支merge(即合并,以下统称merge)到我们的主分支上。

前面的文章《Git初学札记(四)————Git Push的常规操作与Pull冲突解决》中已经简单的提到过merge的操作,但是,Git的merge功能并不局限于此。(比如,当其他开发者格式化了代码,这个时候我们又该如何merge?这里就涉及到了Git的高级merge功能。不过博主还没有找到EGit的相关设置)

在Git中合并是相当容易的。Git使得多次合并另一个分支变得很容易,这意味着我们可以有一个始终保持最新的长期分支。经常解决小的冲突,比在一系列提交后解决一个大的冲突要好。

在发生比较棘手的冲突时,Git并不会尝试智能地自动解决它,Git的哲学是聪明的决定无歧义的合并方案。

开始Merge

如何开始merge工作呢?EGit为我们提供了三个可以触发merge工作的入口:

1、History视图

2、Team菜单

3、Git Repositories视图

这三个视图中都有merge操作的入口,不论哪种方式,Git都是认为将其他分支merge到当前分支上。所以在merge之前,请先切换到主线分支上(注意主线分支并不代表master分支,这是相对而言的,主线分支可以是任何分支,例如有两个分支 A 和 B,如果要将B merge 到 A 上,那么A就是主线分支,B就是支线分支)。

巧用Git Staging视图

EGit的Git Staging视图不仅只是在add index 和commit 时才会用到,当发生merge冲突时也会有大用处。

EGit的官方文档这样写道:

A merge can result in conflicts which require user action. This is the case when the content of files cannot be merged automatically. These conflicts are marked with a label decoration in the Staging View. Using the Staging View to find the files with conflicts in order to resolve them is handy since the Staging View shows only modified files so that you don't have to wade through all of your resources but only those which might need your attention for resolving the conflicts.

Staging视图可以为我们准确聚焦需要我们集中注意力解决冲突的文件上,而不是由我们自己去搜索全部的资源文件。

在这里,我们可以右键冲突文件,选择我们希望的merging操作:

我们可以直接打开文件,看到<<<<<<<======>>>>>>>标记之后的文件内容(如下图),手动去修改。

也可以通过Merge Tool中提供的一些工具来进行merge操作,或者干脆双击文件,EGit会直接打开文件比对视图。

放弃Merging

当然,如果我们养成良好的习惯,经常merge小的改变,我们也不会苦了自己。但是,如果我们遇到了很多冲突修改需要merge 却没有足够的时间完成这些合并工作,我们该如何退出这次merge操作?

通常,当我们配置merge选项的时候都会选择如下单选框:

这并不是一个常规意义上的单选框,因为第三项完全可以和前两项同时存在。当选择第三项的时候,发生冲突后,会立刻终止merge操作,而不是将冲突文件标记成<<<<<<======>>>>>>>的一个文件。这样,我们就可以试探性的去进行merge操作,而不是一发生冲突,就立刻要去合并。

但如果我们仍然选择上图所示的默认配置,当发生冲突后,我们如何才能退出merging工作,或者暂时先不去完成冲突修改的合并工作呢?

这里有一个reset功能,了解一下:

当我们看到了如下图所示的一系列冲突文件而头大想去休息一下的时候,为了防止误操作,我们希望先退出合并编辑,一会再集中精力来解决它怎么办?

打开Team > Reset...

默认Hard选项即可,点击Reset按钮:

再次确认回退:

这样,我们就回退到了还没有点击merge按钮的样子:

这样,我们呆一会再来进行merge操作的时候就不会有任何问题了。

可能的Merge结果

merge可大致分为三种情况:Already-up-to-date ,Fast-forward ,Conflicting 

下面是三种情况的merge结果会话框:

注意!!!Already-up-to-date代表两个分支的提交已经同步,而不是内容已经没有冲突!

如何解释这句话?假设,我们将B分支merge 到A上的时候发生了冲突。这个时候Git会将冲突内容全部写入当前分支的冲突文件中,用<<<<<=====>>>>>标记出来,并且要求使用者完成编辑操作。

这个时候我们已经进入了一种“merging”的状态,Git默认使用者此刻正在解决冲突。是的,它是这么认为的,然而,不论我们有没有认真修改冲突文件中的内容,也不论有没有真正意义上的完成了两个文件的修改整合工作,在我们点击commit之后,Git即默认我们已经完成了merge工作,Git就会将两个分支的指针指向同一个commit,并且将当前的主线分支标记为Merged。

可就在这时,我们突然想起来刚刚有一个方法没有merge进来,当我们再去merge这两个分支时,就会出现Already-up-to-date的结果,它代表两个分支的提交版本已经是同步了。

所以这点要格外注意,在merging的时候要尽可能的确保已经完成了所有修改的合并。因为一旦提交,Git将不再会认为这两个分支是有冲突的了。

 

综上,就是关于EGit在merge的时候涉及到的一些常规操作和一些基本视图。如有疑问,欢迎文末留言。

参考:《EGit/User Guide》

 

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

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

相关文章

公钥,私钥和数字签名这样理解轻松入门!

公钥&#xff0c;私钥和数字签名这样理解轻松入门&#xff01;参考博文&#xff1a;https://blog.csdn.net/21aspnet/article/details/7249401 &#xff08;公钥和私钥是成对出现的&#xff0c;可以把他们看成锁头和钥匙的关系&#xff0c;公钥为锁头&#xff0c;私钥是钥匙&am…

Spring Boot + JSP

目录 引言 Maven依赖 JSP页面 application.properties配置 controller 结果展示 引言 在尝试使用shiro的时候需要页面登录的加持&#xff0c;但是长期的前后端分离工作&#xff0c;导致页面的知识几乎忘光。突然想通过jsp这种简单的形式来学习其他的技术&#xff0c;作为…

https和http的区别

https和http的区别一、基本概念&#xff08;http服务器-->本地浏览器&#xff0c;正确快速传输&#xff1b;https安全套接字层&#xff0c;http的安全版本&#xff0c; httpssl层&#xff0c;建立一个信息安全的通道&#xff0c;保证数据传输的安全&#xff0c;确认网站的…

Markdown简明使用

#Markdown使用技巧 ##代码背景 可以使用反引号&#xff0c;来将特殊文字括起来&#xff0c;这样Markdown会自动为引号中的内容加入背景。 形如&#xff1a;内容 例如&#xff1a;Java project > team > share project ##图片上传 图片无法像正常的文本编辑器那样直接粘贴…

Spring Boot + Mybatis 快速整合

引言 最近在工作结束后抽时间学习了一下mybatis的知识&#xff0c;因为之前有学习过&#xff0c;但是经久不用&#xff0c;也未曾踏实地整理&#xff0c;因此有所淡忘。 super meeting会议管理系统是我厂最近开发的一套会议预约平台。持久层框架经讨论&#xff0c;选为灵活优…

SQL关联查询————LEFT JOIN关键字的使用

引言 关联查询一直是非常重要的SQL使用技巧。 在一次查询操作中&#xff0c;使用mybatis进行条件查询&#xff0c;在没有使用 LEFT JOIN 关键字的情况下是这样写的&#xff1a; <!-- 查找成员 --><select id"selectUsers" resultMap"selectUsers_Res…

Java知识点全面汇总

&#xfeff;&#xfeff; 相关概念 面向对象的三个特征 封装&#xff0c;继承&#xff0c;多态&#xff0c;这个应该是人人皆知&#xff0c;有时候也会加上抽象。 多态的好处 允许不同类对象对同一消息做出响应&#xff0c;即同一消息可以根据发送对象的不同而采用多种不…

Git初学札记(八)————版本回退

引言 不论是使用svn还是git&#xff0c;版本回退都是一个非常重要的功能。 EGit版本回退 在History视图中&#xff0c;我们可以看到我们的commit历史&#xff0c;选中任意一个commit版本&#xff0c;右键reset —>Hard &#xff0c;即可回退到指定版本。 注意&#xff0c…

Java实现用户头像上传(修改默认文件大小限制)

概述 每次说起文件上传&#xff0c;就不得不提一下前端的实现方式&#xff0c;说来也奇怪&#xff0c;本博主最热门的博客居然也是文件上传&#xff0c;3万多的访问量占了总访问量的一多半&#xff1a;《传统form表单提交方式的文件上传与文件存储》&#xff0c;而且&#xff…

垃圾回收机制和JVM垃圾回收常见算法

垃圾回收机制和JVM垃圾回收常见算法垃圾回收的好处和特点&#xff1a; 好处&#xff1a; 1. 提高编程效率&#xff1b; 2. 垃圾回收机制保护程序的完整性。特点&#xff1a; 1. 只能回收无用对象的内存空间&#xff0c;对其他物理资源无能为力&#xff1b; 2. 为了更快回收不再…

Java 多线程 —— 死锁与锁的错误用法

引言 死锁状态的大致情况是&#xff1a;Thread_1在获得A对象的锁后&#xff0c;紧接着去请求B对象的锁 &#xff0c;Thread_2在获得了B对象的锁后&#xff0c;紧接着又去请求A对象的锁&#xff0c;如下图&#xff1a; 一、模拟一个死锁 public class DeadLockDemo {static cl…

Java零基础并发编程入门

Java零基础并发编程入门并发编程主要包括&#xff1a; 线程&#xff0c;同步&#xff0c;future&#xff0c;锁&#xff0c;fork/join&#xff0c; volatile&#xff0c;信号量&#xff0c;cas&#xff08;原子性&#xff0c;可见性&#xff0c;顺序一致性&#xff09;&#xf…

Java内置锁——synchronized

一、给对象加把锁 synchronized关键字是Java唯一内置的互斥锁&#xff0c;通过关键字 synchronized 可以保证同一时刻只有一个线程获得某个同步代码块的执行权&#xff0c;但不会导致其他线程执行非同步方法时阻塞。 当获得锁的线程执行完同步代码块后&#xff0c;线程会将锁…

处理对象(toString()方法详解和==与equals方法的区别)

处理对象&#xff08;toString&#xff08;&#xff09;方法详解和与equals方法的区别&#xff09;toString&#xff08;&#xff09;是一个非常特殊的方法&#xff0c;它是一个自我描述的方法。当程序员直接打印该对象的时候&#xff0c;系统会输出该对象的“自我描述”的信息…

Java并发编程实战——volatile

引言 Java 语言提供了一种弱同步机制——volatile 变量。它的作用是确保将变量的更新操作通知到其他线程。 当把变量声明为volatile后&#xff0c;编译器和运行时都会注意到这个变量是共享的&#xff0c;因此不会将该变量上的操作与其他内存操作一起重排序。 另外&#xff0…

Java中类的加载顺序介绍(ClassLoader)

Java中类的加载顺序介绍(ClassLoader)1、ClassNotFoundExcetpion   我们在开发中&#xff0c;经常可以遇见java.lang.ClassNotFoundExcetpion这个异常&#xff0c;今天我就来总结一下这个问题。对于这个异常&#xff0c;它实质涉及到了java技术体系中的类加载。Java的类加载机…

UP装机部署步骤大纲

Linux装机 插上网线&#xff0c;然后&#xff0c;Ubuntu系统安装&#xff08;略&#xff09; 更改root密码 以装机时设置的用户登陆后&#xff0c;sudo修改root用户密码&#xff0c;然后退出&#xff0c;重新登录root。 $ sudo passwd root 下载并安装JDK $ java (根据提…

Java 多线程 —— wait 与 notify

引言 认识一下 Object 类中的两个和多线程有关的方法&#xff1a;wait 和 notify。 wait&#xff0c;当前线程进入 WAITING 状态&#xff0c;释放锁资源。 notify&#xff0c;唤醒等待中的线程&#xff0c;不释放锁资源。 一、使用 wait-notify 实现一个监控程序 实现一个…

重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

重写equal()时为什么也得重写hashCode()之深度解读以及equal方法与hashCode方法渊源转载自&#xff1a;http://blog.csdn.net/javazejian/article/details/51348320 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode()&#xff0c;我们准备从以下几点入手分…

Java8————Optional

引言 Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true&#xff0c;调用get()方法会返回该对象。 Optional 是个容器&#xff1a;它可以保存类型T的值&#xff0c;或者仅仅保存null。Optional提供很多有用的方法&#xff0c;这样我们就不用显式进…