记录IntelliJ IDEA 合并冲突时的一个bug(冲突解决后代码和本地仓库一样时导致merge失败)

目录

IntelliJ IDEA版本

IntelliJ IDEA 2017.1.4 x64
  • 1

问题描述

我们在用git开发是经常遇到冲突的情况,一般发生在协同开发时,一个文件被两个人同时改掉了,这是我们在pull代码时要解决冲突,并重新add然后commit最后push.

这个博客记录一个IntelliJ IDEA在解决冲突的小问题.我们先构造一下冲突

github如下:
这里写图片描述

本地IDEA如下:
这里写图片描述

README.md在本地仓库和github上第三行的数据不一样,这是如果我们push会提示我们需要先pull(fetch+merge),这里就不演示这个提示了.我们直接pull
这里写图片描述

这里写图片描述

提示我们有冲突,我们选择merge,在IDEA上解决冲突
这里写图片描述

注意下边的这张图:
这里写图片描述

我们按照如下方式解决冲突:然后点击apply

这里写图片描述


解决完冲突我们需要从新add , commit 然后push,但就在这时我们通过windows git bash客户端用git status -s命令查看当前状态时却发现没有可以add的代码.但是在最后方箭头位置提示 (master|MERGING)
注:这个MERGING出现在merge开始,消失在commit完成,即merge结束

git bash(纯命令行) / linux(centos) 纯命令行:哪怕解决完冲突的代码和本地仓库代码相同也是需要我们接下add commit的.add前通过git status -s 命令查看会发现这个文件前边状态为 UU

IDEA处理冲突:如果最终解决完冲突的代码和本地仓库代码不同的话这里是会提示有可以add的内容(status -s查看状态为文件前边状态为 UU,和git bash / linux一样),而解决完冲突的代码如果本地仓库代码相同的话如下图.且此时通过 git diff 和 git diff –cached命令查看发现工作区,暂存区,本地仓库代码全部一样.

这里写图片描述

因为上边这部我们没法add,所以我们直接通过IDEA commit.居然提示我们没有可以commit的代码.
这里写图片描述
这里写图片描述

这是我们看一下git log ,很显然还没有merge完啊.明明我刚才已经解决了冲突了呀,但是merge到一半IDEA撂挑子啦.
这里写图片描述

如果此时我们试图将代码push到仓库会出现这个情况:(大意是需要先merge在push,也就是merge一半现在是)
这里写图片描述

这时我们通过IDEA自带的git试图去merge的话会出现错误,原因是有一个merge现在正在进行中.如下图
这里写图片描述

这里写图片描述

解决办法

现在问题定位了,IDEA在merge到一半的时候出问题了.所以接下来的事情只能我们自己解决了.我们先分析一下现在断在哪里了,因为刚才通过git diff 和 git diff –cached命令查看状态时并没有发现什么不同,所以姑且认为add已经完成了.那好我们自己通过命令行commit
这里写图片描述

出现如下commit信息(merge产生的),:wq退出,merge成功.
这里写图片描述

观察IDEA的git log发现也正常了
这里写图片描述

还有一种解决思路:就是我们直接把.git/MERGE_HEAD删掉,这样进行到一半的merge就被我们干掉了.这个方法我没有试验,有兴趣同学可以试试

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在合并冲突,定位到更改的位置是非常有帮助的。这样可以快速找到冲突发生的地方,并解决冲突。 以下是一些方法可以帮助你定位到更改的位置: 1. 使用版本控制系统的图形界面工具:许多版本控制系统(如Git、Mercurial)都提供了图形界面工具,可以显示冲突的位置和差异。这些工具通常会在冲突的地方标记出更改,并提供合并工具来解决冲突。 2. 使用命令行工具:如果你更喜欢使用命令行,版本控制系统也提供了命令行工具来解决合并冲突。例如,使用Git可以运行`git diff`命令来查看差异,`git status`命令来查看冲突的文件,以及`git mergetool`命令来使用合并工具解决冲突。 3. 使用集成开发环境(IDE):许多IDE(如Visual Studio Code、IntelliJ IDEA)都集成了版本控制系统和合并工具。这些IDE可以帮助你定位到更改的位置,并提供可视化的界面来解决冲突。 4. 手动搜索:如果你不使用任何特定的工具或者无法访问版本控制系统,你可以手动搜索冲突的标记。在冲突的文件中,通常会有一些特定的标记(如`<<<<<<<`、`=======`、`>>>>>>>`),可以帮助你定位到冲突发生的地方。你可以通过搜索这些标记来找到更改的位置,并手动解决冲突。 请注意,定位到更改的位置只是解决合并冲突的第一步。一旦找到了冲突的位置,你还需要仔细审查和理解更改,以确保正确地解决冲突
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值