【IDEA结合Git实现项目管理实战】四、git冲突篇

这篇具有很好参考价值的文章主要介绍了【IDEA结合Git实现项目管理实战】四、git冲突篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【IDEA结合Git实现项目管理实战】四、git冲突篇

前言

本系列将结合我个人参与团队协作开发项目的经验来介绍如何使用IDEA结合Git实现项目管理,因此可能与真正的企业开发协作存在差异,且文章所涉及的解析可能存在个人理解与实际的偏差。

本系列主讲如何具体操作,因此对于Git内部的原理将不会过多深究

本文严禁任何形式的转载、搬运!

在使用Git进行项目管理时,代码合并是一项常见而重要的操作。本文将重点探讨两种常用的代码合并操作:合并(merge)和变基(rebase)。在进行代码合并时,我们难免会遇到Git冲突的情况。本文也将通过举例详细介绍如何通过IDEA使用Git进行合并或变基操作时可能遇到的代码冲突情况,并提供解决方法。

什么是git冲突

在多分支并行处理时,每个分支可能基于不同版本的主干分支创建。如果每个分支都独立开发而没有进行代码合并,自然不会出现代码冲突。但是,当两个分支同时修改同一文件时,在代码合并时就会出现冲突。

下图为两个分支分别使用合并/变基操作解决冲突后的提交树。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

解决git冲突

介绍完冲突出现的原因,那么如何解决冲突呢?在解决git冲突时,我们需要确定以哪个分支的文件版本为准,或者取两个分支的文件的部分片段进行整合。

IDEA提供了强大的冲突解决功能,供用户处理git冲突。下面将进行详细介绍。

当前分支dev1的代码:

package com.hmdp;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.redisson.api.RedissonClient;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@Slf4j
@SpringBootTest
class JavaTest {

    @Resource
    private RedissonClient redissonClient;

    @Test
    void method1() {
        // 打印hello world
        System.out.println("hello world");

    }
    void method2() {
        // 打印你好 世界
        System.out.println("你好 世界");
    }
}

目标分支dev的代码:

package com.hmdp;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.redisson.api.RedissonClient;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@Slf4j
@SpringBootTest
class JavaTest {

    @Resource
    private RedissonClient redissonClient;


    @Test
    void access() {
        //打印Red Dead:redemption2
        System.out.println("Red Dead:redemption2");

    }

    @Test
    void access2() {
        //打印荒野大镖客:救赎2
        System.out.println("荒野大镖客:救赎2");

    }

}

我们现在的目标是让两个分支合并后的代码中同时出现method1、method2、access和acess2这四个方法

执行合并后,出现界面:

左侧为当前分支dev1的提交记录,中间为合并前的预览结果,右侧为目标分支dev的提交记录。

其中红色区域为代码存在差异的部分。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

先来看第一块红色区域的中间部分的代码。大家一定会疑惑预览结果里出现这段代码是什么意思?为什么会出现报错呢?

<<<<<<< HEAD
=======
import java.util.concurrent.TimeUnit;
>>>>>>> dev

这里其实是git对于左右侧存在差异的代码的标记。符号<<<<<<< xxx的下方是左侧存在差异的代码,符号>>>>>> xxx的上方是右侧存在差异的代码,比如<<<<<<< HEAD箭头所指方向也就是我们当前分支的方向(在左侧),在该箭头下面的部分是当前分支的与目标分支的差异代码,这里因为左侧比右侧少了一段代码,因此下面啥东西没有;=======代表分割符号,该分割符号的下面就是目标分支的代码,即import java.util.concurrent.TimeUnit>>>>>>> dev也就代表目标分支的方向(在右侧)

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

那么如何解决冲突呢?对于我们的目标来说,我们的输出语句自然不需要导入这个包,因此把语句import java.util.concurrent.TimeUnit;给删除即可。

点击左侧的箭头符号,可以把中间区域被替换成左侧的红色区域(那根细线,也就是没有代码)。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

点击后中间区域消失。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

再来看第二个红色区域,根据我们的目标,我们要将这四个方法都添加进入中间区域。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

先点击左侧的箭头。可以发现中间区域被替换为左侧代码,右侧向左箭头变成了向左下箭头。

这个向左下的箭头代表将右侧的代码添加到中间代码的下方

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

点击后如图:

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

那么一切就大功告成了,冲突解决成功,点击右下角应用按钮。

git提示还有冲突未处理,这是为什么?

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

把界面翻到上面,发现这个红色区域还没有处理,我们点击那个叉号,作用是将冲突标记为已解决

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

这时IDEA提示所有变更已被处理,那么我们就可以放心大胆的合并了。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

合并成功!

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

合并/变基详解

合并(git merge)

当前分支和目标分支执行合并操作时,Git会将当前分支的最新提交记录与目标分支的最新提交记录合并,并在当前分支形成一个新的提交记录

示例1

当前分支为dev1,目标分支为dev,目标分支dev中存在两条当前分支dev1分支没有的提交记录。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

执行合并操作,dev中的提交记录添加到了分支dev1中。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

示例2

当前分支为dev1,目标分支为dev,当前分支dev1中存在两条目标分支dev分支没有的提交记录。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

执行合并操作,git给出提示(已是最新 删除dev),当前分支dev1没有变动。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

示例3

当前分支为dev1,目标分支为dev,当前分支dev1中有新的提交记录添加测试类,目标分子dev中有新提交记录添加新文件(该示例由于都是添加新文件,没有对同一文件进行更改,因此不存在代码冲突)

dev1中添加了一个JavaTest文件。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

dev分支中添加了一个test.lua文件。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

执行合并操作,在目标分支dev1中生成一个新的提交记录Merge branch 'dev' into dev1,该提交记录包含了这两个提交记录的变更,如图。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

在提交树中,可以看到两个提交记录合并为一个记录。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

变基(git rebase)

当前分支和目标分支执行变基操作时,Git会将目标分支的最新提交记录依次应用到当前分支的每个新的提交记录中。

示例1

当前分支为dev1,目标分支为dev,目标分支dev中存在两条当前分支dev1分支没有的提交记录。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

执行变基操作,dev中的两条记录添加到了dev1中。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

示例2

当前分支为dev1,目标分支为dev,当前分支dev1中存在两条目标分支dev分支没有的提交记录。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

执行变基操作,没有发生变化。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

示例3

当前分支为dev1,目标分支为dev,当前分支dev1中有新的提交记录添加测试类,目标分子dev中有新提交记录添加新文件(该示例由于都是添加新文件,没有对同一文件进行更改,因此不存在代码冲突)

dev1中添加了一个JavaTest文件。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

dev分支中添加了一个test.lua文件。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

执行变基操作,dev分支的提交记录添加到了dev1分支中。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

总结

可以发现,无论是对于合并还是变基操作的示例1和示例2,最终执行操作后的结果都是一样的。对于合并操作,git将两个分支进行合并,最后生成一个新的提交记录,提交树存在交叉。对于变基操作,git将目标分支的提交记录应用到当前分支,提交树仍然是线性的。如图所示。

至于在实际开发中选择合并还是变基,还是看个人喜好了。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

代码冲突示例

注意:本文为方便理解,所有示例均简单的修改项目中的md文件,实际开发中可能存在对多个文件的冲突,但万变不离其宗,只要你具备了解决单个文件代码冲突的能力,那么多个文件的冲突也能轻松应对。

合并/变基分支1

分支情况,当前dev1的两个提交记录博文1博文2都在dev的提交记录博文3之前,其余分支一样

时间顺序:博文1->博文2->博文3

合并

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

此时合并有代码冲突,解决这个冲突。

发现该冲突只针对博文2,也就是最后一个提交记录

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

变基

该冲突为博文1博文3的冲突

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

该冲突为变基后的博文1博文2的冲突

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

合并/变基分支2

分支情况:

dev中的博文3在dev1中的博文1博文2之间

时间顺序:博文1->博文3->博文2

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

合并

基于上述情况,合并分支存在代码冲突

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

在代码冲突中,存在博文2和博文3的冲突,

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

冲突解决后如图所示。

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

这里紫色因为博文3是属于别的分支过来的,其父提交是add README.md.。所以从add README.md.出发,与dev1原本的提交记录博文2结合形成一个新的提交记录Merge branch 'dev' into dev1

结论:分支以时间顺序进行排序,合并分支永远是两个分支的最后一个提交历史进行合并。

变基

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

博文1博文3存在冲突

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

冲突解决后,选择提交消息不变

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

依然存在冲突

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

可以发现该冲突来自于已经变基的提交博文1和之后的博文2

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

得到变基后的提交树

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

合并/变基分支3

分支情况:

dev1中的两个提交记录博文1博文2在dev中的博文3提交之后

时间顺序:博文3->博文1->博文2

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

合并

博文2博文3存在代码冲突

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

变基

冲突来自于博文3博文1

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

冲突来自变基后的博文1博文2

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

【IDEA结合Git实现项目管理实战】四、git冲突篇,Git,intellij-idea,git,elasticsearch

总结

通过这三个代码冲突的示例,看到区别了吗?

在合并操作时,冲突通常发生在两个分支的最新提交记录上。这是因为合并是将两个不同的分支合并为一个,而最新的提交记录是两个分支的端点。如果两个分支都对同一文件进行了修改,Git 无法确定应该选择哪个更改,因此会产生冲突。

在变基操作时,冲突可能发生在当前分支的提交记录和目标分支的提交记录之间的每个提交记录上。这是因为变基是将一系列提交应用到另一个分支上,而不仅仅是最新的提交。如果两个分支都修改了相同的文件,冲突可能会在每个提交记录上发生,而不仅仅是最新的提交。

总的来说,冲突是由于两个分支都对同一文件进行了修改,而 Git 无法自动解决冲突的情况下发生的。在合并操作中,冲突通常发生在最新的提交记录上;在变基操作中,冲突可能发生在多个提交记录上。文章来源地址https://www.toymoban.com/news/detail-777468.html

到了这里,关于【IDEA结合Git实现项目管理实战】四、git冲突篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在IDEA中使用Git,把IDEA项目加入Git本地库,使用Git管理Java代码

    目录 一、在IDEA中启用GIT,配置GIT安装位置 二、配置Git使其不将某些文件或文件夹加入版本控制 三、认识IDEA中Git管理界面 四、初始化GIT版本库 五、添加至Git暂存区 五、提交至Git本地库 六、切换历史版本  如果您对GIT不是了解,推荐从头开始看本栏目系列文章。本系统文章

    2024年02月03日
    浏览(66)
  • Git的下载安装配置与上传文件以及命令 idea使用git项目版本操作管理

    Git - Downloads (git-scm.com) https://git-scm.com/downloads  下载速度比较慢,可以用迅雷下载,速度很快 我这里是用的压缩包版本,直接解压到要放的文件夹即可,文件名尽量不要使用中文,以防后续使用出现错误。  打开环境变量,在系统变Path,添加你的git安装路径/bin win+r输入cmd,

    2024年02月04日
    浏览(65)
  • Git在已有的项目中引入Submodule子模块管理:添加、更新、删除(实战示例代码)

    在进行Git版本控制的过程中,有时候我们需要在已有的项目中引入子模块,以便复用其他独立的Git存储库的代码或文件。本文将详细介绍如何在已有项目下添加、更新和删除Git的Submodule子模块,并提供相关的示例代码。 假设我们已经有一个主项目(my-main-project)的Git存储库,

    2024年02月07日
    浏览(41)
  • 【git】拉取的项目放入idea中,未作任何修改,但是一开始就有文件没有纳入git管理,进行回滚,但是报错filename too long,git拉取代码时就报错filename too long

    我在接手一个新项目时,要做这个项目的需求变更,然后我将这个项目从公司的gitlab上拉下来,但是发现刚拉下来的项目就有很多文件没有纳入git管理和一些文件变更,但是这个是刚拉下来的文件,我没有做任何的操作 尝试切换分支也失败,就是因为识别到本地有内容更改没

    2024年02月05日
    浏览(86)
  • AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(五)—— 项目-新闻头条-数据管理平台-ajax综合案例前端

    愿许秋风知我意,解我心中意难平。 推荐使用, 每个程序员都有自己的管理方式。 HTML结构: 1.为什么要提取公共前缀地址(基地址),因为公司业务可能会更换服务器,如果你不想一条一条地修改请求地址的话。 后续使用axios时,url不需要再写前缀。 2.请求成功与失败 成

    2024年01月25日
    浏览(49)
  • git项目管理

    git init     #创建本地仓库,创建成功后,当前目录会多一个.git文件夹 git status    #查看修改状态 git add .      #添加工作区到暂存区 git commit -m \\\'注释内容\\\'    #提交暂存区到本地仓库(commit) git log       #查看提交日志 参数: --all  现实所有分支 --pretty=on

    2024年01月18日
    浏览(32)
  • Git系列:运用Git创建空白分支进行项目相关文档管理

    项目管理过程中没有做好相关文档管理,比如需求,开发,测试等文档,需要对项目在过程中产生的相应文档进行管理,目前使用的是Git进行代码库管理,因此考虑通过Git进行相应的文档库管理。下面就是这次的一个考虑过程,供大家参考。 起初,考虑将代码和项目文档统一

    2024年02月10日
    浏览(44)
  • git(项目版本管理工具)快速入门

    目录 1、git 1.1、git概述 1.2、git的服务器地址 1.3、git原理 2、客户端操作 2.1、初始化本地库 2.2、添加本地暂存区  2.3、提交本地库 2.4、修改文件 2.5、查看修改历史 2.6、查看版本差异 2.7、删除文件 2.8、文件还原 3、git命令 3.1、初始化本地库 3.2、查看本地仓库状态 3.3、添加本

    2023年04月12日
    浏览(76)
  • 开源项目的版本管理:Git的最佳实践

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月05日
    浏览(43)
  • 学习【Git项目管理工具】这一篇就够了

    Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、ml文件、html页面等),在软件开发过程中被广泛使用。 学完Git之后能做什么? 代码回溯 版本切换 多人协作 远程备份 Git仓库分为两种: 本地仓库:开发人员自己电脑的 Git 仓库 远程仓库:远程服务

    2024年01月19日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包