git 合并冲突_git分支管理的策略和冲突问题

  • 备注:

  • 知识点

  • 关于分支中的冲突

  • 分支管理的策略

  • 分支策略

备注:

本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

知识点

  • git log --graph --pretty=oneline --abbrev-commit查看分支合并情况

  • git log --graph查看分支合并图

  • 当两个分支修改同一个文件时,可能发生两个分支不能自动合并的问题,需要手动解决冲突(合并时,Git将冲突标识了出来),然后再次提交,即可完成合并。

  • 使用参数--no-ff禁用快合并模式,git merge --no-ff -m"merge with no-ff" dev,合并

关于分支中的冲突

如下,新建一个分支dev2,并且在新分支上开发:

$ git checkout -b dev2
切换到一个新分支 'dev2'

修改readme.txt,添加一行。

Creating a new branch is quick AND simple.
  • 在dev2分支进行提交,
$ git add readme.txt
$ git commit -m"add new line at readme on dev2"
[dev2 4a097db] add new line at readme on dev2
1 file changed, 1 insertion(+)
  • 切换到master分支,同时在master上修改readme文件(添加域dev2分支上文件不同的内容,Creating a new branch is quick & simple.),并且提交
git checkout master
切换到分支 'master'
您的分支领先 'origin/master' 共 1 个提交。
(使用 "git push" 来发布您的本地提交)
$ git add readme.txt
$ git commit -m"add new line at readme on master"
[master d562bf7] add new line at readme on master
1 file changed, 1 insertion(+)

如上,Git会自动提示当前master分支比远程origin/master分支领先一个提交

现在master分支和dev2 分支都有了各自新的提交,在这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,由于同时都修改了同一行内容,此时会有冲突。

$ git merge dev2
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果。

Git提示自动合并存在冲突,冲突文件是readme,需要修正冲突然后提交修正后的结果

如果用git status查看看当前状态

$ git status
位于分支 master
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
(解决冲突并运行 "git commit")

未合并的路径:
(使用 "git add ..." 标记解决方案)

双方修改:readme.txt

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

如上,提示双方修改

  • 查看readme.txt的内容
$ cat readme.txt

`this is a test that I learn and use git version control system
this is a beginning
wofaidognyixie dognxi
create two new branch
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev2
  • Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存
Creating a new branch is quick and simple.
  • 修改冲突后提交
$ git add readme.txt
$ git commit -m"conflict fixed"
[master 8f69de8] conflict fixed

Git提示冲突已经修复,现在masterdev2分支均指向了现在工作区的状态。

  • 使用git log --graph --pretty=oneline --abbrev-commit可以查看分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
* 8f69de8 conflict fixed
|\
| * 4a097db add new line at readme on dev2
* | d562bf7 add new line at readme on master
|/
* 03d07d2 modify readme.txt at branch
* 036ced2 a push test
* 6a0f133 remove test.txt
* b5c87d4 add a test file
* d5b84bf modifya readme file
* 3033dda add a readme file

如上,分支合并和冲突记录

  • 此时可以删除dev2分支
$ git branch -d dev2
已删除分支 dev2(曾为 4a097db)。

冲突解决完成

分支管理的策略

通常,合并分支时Git使用Fast forward模式快速合并。但是快速模式删除分支,会丢失分支信息。

强制禁用Fast forward模式,Git会将merge记录为一个新的提交,同时分支历史会记录分支信息。

  • 切换到dev分支,并修改readme文件,同时提交commit
$ git checkout -b dev
切换到一个新分支 'dev'
$ git add readme.txt
$ git commit -m"a new branch"
[dev 44dffc0] a new branch
1 file changed, 1 insertion(+)
  • 切换到master分支
$ git checkout master
切换到分支 'master'
您的分支领先 'origin/master' 共 4 个提交。
(使用 "git push" 来发布您的本地提交)
  • 使用--no-ff参数合并分支dev到当前master,本次合并要创建一个新的commit,所以加上-m参数描述
$ git merge --no-ff -m"merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
  • 使用git log查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit
* 7c4d427 merge with no-ff
|\
| * 44dffc0 a new branch
|/
* 8f69de8 conflict fixed
|\
| * 4a097db add new line at readme on dev2
* | d562bf7 add new line at readme on master
|/
* 03d07d2 modify readme.txt at branch
* 036ced2 a push test
* 6a0f133 remove test.txt
* b5c87d4 add a test file
* d5b84bf modifya readme file
* 3033dda add a readme file

分支策略

实际开发中,分支管理应按照以下几点:

  1. master分支是稳定分支,用来发布最新稳定版本,开发中不需要修改它

  2. 开发中尽量在dev中开发,扩展新功能、修复bug等,等到正式版发布时,在将dev分支合并到master上。

  3. 开发人员在dev分支上开发,每个人都有自己的分支,并且往dev分支上合并。

d863f4739610e560690e0c3e675fd972.png
团队合作分支开发

参考

Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

a3ee15c71980b2105c55db45a25fbbb5.gif

b6c76d14c243c8b75ca96aec91dfe1cf.gif

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

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

相关文章

mysql duplicate key与replace into对比

【REDME】 有些业务场景如下&#xff1a; 对于数据已经存在的&#xff0c;则更新&#xff1b;否则新增&#xff1b; 怎么判定数据已经存在&#xff0c;通过主键或唯一索引来判断&#xff1b; 业务场景&#xff1a;业务库的全局参数表的参数值的新增或更新就是 有则更细无则…

基于springboot+vue的前后端分离商城系统

springboot前后端分离商城 介绍 springboot前后端分离商城 本项目由本人根据教程实现的一个springboot项目&#xff0c;基本已实现项目&#xff0c;但是本人希望加入自己的小功能&#xff0c; 请期待下一次的更新~ 教程地址&#xff1a;教程 软件架构 软件架构说明: 本项目…

Java 8 HashMap键与Comparable接口

转载自 Java 8 HashMap键与Comparable接口 这篇文章主要介绍了 Java 8 在 HashMap 哈希冲突处理方面的新特性。 相对之前的版本&#xff0c;Java 8 在许多方面有了提升。其中有很多类被更新了&#xff0c;HashMap 作为最常使用的集合类之一也不例外。这篇文章将介绍 Java 8 中…

hash地址_一致性Hash在负载均衡中的应用

作者&#xff1a;marklux原文&#xff1a;http://marklux.cn/blog/90简介一致性Hash是一种特殊的Hash算法&#xff0c;由于其均衡性、持久性的映射特点&#xff0c;被广泛的应用于负载均衡领域&#xff0c;如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案。本文…

(转)linux上nginx源码编译安装

亲测有效&#xff1b; 转&#xff1a; https://segmentfault.com/a/1190000007116797https://segmentfault.com/a/1190000007116797 nginx服务器详细安装过程&#xff08;使用yum 和 源码包两种安装方式&#xff0c;并说明其区别&#xff09; 正在上传…重新上传取消​fuyi…

牛客网JAVA专项联系共899题--个人记录学习经历

总览 共刷900题 其中也有许多知识点是未曾涉足的&#xff0c;但大部分还是java的基础。 基本数据 正确题数&#xff1a;正确率百分之67&#xff0c;即&#xff1a;对了603题&#xff1b; 时间&#xff1a;5天&#xff08;每天4小时左右&#xff09; 错题&#xff1a; 收藏数…

ffmpeg中文开发手册_快速调用复杂命令,支持中文注释,命令行备忘工具navi两天就火了...

晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI刚学的一句新命令&#xff0c;才用完就忘了用法&#xff1f;通常情况下&#xff0c;命令后加一句—help就行了。但是&#xff0c;命令的帮助文档往往内容太太太太多了&#xff0c;在里面找到自己关心的部分实在太难了。查找出来的…

用python绘制图形_使用Python的turtle画炫酷图形

例子一&#xff1a; import turtle t turtle.Pen() turtle.bgcolor("black") sides6 colors["red","yellow","green","blue","orange","purple"] for x in xrang(360): t.pencolor(colors[x%sides]) t…

leetcode初级算法1.删除排序数组中的重复项

leecode初级算法1.删除排序数组中的重复项 仅为个人刷题记录&#xff0c;不提供解题思路 题解与收获 class Solution {public int removeDuplicates(int[] nums) {int n nums.length;if (n 0) {return 0;}int fast 1, slow 1;while (fast < n) {if (nums[fast] ! num…

(转)mybatis热部署加载*Mapper.xml文件,手动刷新*Mapper.xml文件

转自&#xff1a; https://blog.csdn.net/LOVELONG8808/article/details/78738086 由于项目已经发布到线上&#xff0c;要是修改一个Mapper.xml文件的话&#xff0c;需要重启整个服务&#xff0c;这个是很耗时间的&#xff0c;而且在一段时间内导致服务不可用&#xff0c;严重…

图解HashMap和HashSet的内部工作机制

转载自 图解HashMap和HashSet的内部工作机制HashMap 和 HashSet 内部是如何工作的&#xff1f;散列函数&#xff08;hashing function&#xff09;是什么&#xff1f; HashMap 不仅是一个常用的数据结构&#xff0c;在面试中也是热门话题。 Q1. HashMap 如何存储数据&#xff1…

window location href 手机端无法跳转_Window对象在前端领域的角色

特殊的window提起window&#xff0c;在网页当中很常见&#xff0c;比如像这样&#xff1a;window.onloadfunction(){ //执行函数体 }这段代码的意思是当网页内容加载完成后要做什么。在js的领域&#xff0c;window对象有着双重角色&#xff0c;既是用来访问浏览器窗口的接口&am…

leetcode初级算法2.旋转数组

leecode初级算法2.旋转数组 仅为个人刷题记录&#xff0c;不提供解题思路 题解与收获 我自己的解法&#xff1a; public static void rotate(int[] nums, int k) {int move k % nums.length;Stack<Integer> stack new Stack<>();if(move 0){return;}else {f…

java运行环境变量及自定义变量

【README】 本文主要介绍java运行环境变量的获取&#xff0c;如何读取 env.properties 文件并将自定义变量写入到系统变量&#xff1b; 【1】System.getenv() 获取环境变量 public static void main1() {Map<String, String> envMap System.getenv();envMap.entrySet(…

Java HashSet和HashMap源码剖析

转载自 Java HashSet和HashMap源码剖析总体介绍 之所以把HashSet和HashMap放在一起讲解&#xff0c;是因为二者在Java里有着相同的实现&#xff0c;前者仅仅是对后者做了一层包装&#xff0c;也就是说HashSet里面有一个HashMap&#xff08;适配器模式&#xff09;。因此本文将重…

怎么把页面按比例缩小_meta viewport 是做什么用的,怎么写?

前置知识&#xff08;有助于viewport的理解&#xff09;李明&#xff1a;设备像素、设备独立像素、CSS像素、分辨率、PPI、devicePixelRatio​zhuanlan.zhihu.com移动端的问题屏幕窄&#xff0c;一般来说设备独立像素不超过400px。比如把网站侧边栏宽度设置为10%&#xff0c;这…

(转)java动态代理与aop

转自&#xff1a; Java 动态代理与AOP - 如果的事 - 博客园动态代理与AOP 代理模式 代理模式给某一个目标对象(target)提供代理对象(proxy)&#xff0c;并由代理对象控制对target对象的引用。 模式图&#xff1a; 代理模式中的角色有&#xff1a; 抽象对象角色(Abstrachttps://…

ConcurrentHashMap的红黑树实现分析

转载自 ConcurrentHashMap的红黑树实现分析红黑树 红黑树是一种特殊的二叉树&#xff0c;主要用它存储有序的数据&#xff0c;提供高效的数据检索&#xff0c;时间复杂度为O(lgn)&#xff0c;每个节点都有一个标识位表示颜色&#xff0c;红色或黑色&#xff0c;有如下5种特性&a…

leetcode初级算法3.存在重复元素

leetcode初级算法3.存在重复元素 仅为个人刷题记录&#xff0c;不提供解题思路 题解与收获 我的解法&#xff1a; Arrays.sort(nums);for(int i 0; i < nums.length-1; i){if(nums[i] nums[i1]){return true;}}return false;官方题解&#xff1a; public boolean con…

sql server累计求和函数_SQL基础--SQL高级功能

一.窗口函数有什么用&#xff1f;在日常工作中&#xff0c;经常会遇到需要在每组内排名&#xff0c;比如下面的业务需求&#xff1a;排名问题&#xff1a;每个部门按业绩来排名topN问题&#xff1a;找出每个部门排名前N的员工进行奖励面对这类需求&#xff0c;就需要使用sql的高…