代码托管(二)git(5)冲突解决

零、冲突解决统一方法

冲突一般出现在:

① pull / merge /cherry pick发生冲突时会弹框列出冲突的文件,并且给出三种操作方法:

② unstash发生冲突,不会弹框,idea会弹出message提示冲突的文件:

以上,冲突的文件都是飘红的。如果没有冲突,会自动add,之后可以进行commit/push;有冲突文件会飘红并且不能自动add。解决方法都是一样的:

1、方法1

手动解决:

(1)关闭弹框

直接关闭上面的弹框

(2)记住冲突文件

记住是哪几个文件冲突了,记不住还可以点击commit查看飘红的文件。

(3)进入源文件

从项目进入到源文件中(不是从commit里面点,那个是对比,在冲突解决之前点击那里会出来三个窗口:left、result、right;冲突解决后只提示变更)。

(4)在源文件中解决冲突

 搜索===,即为冲突标记,

也可以点击右侧的红色感叹号查看是哪里冲突报错了,如我这里有两个冲突,从感叹号提示可以看到引起了13个error:

去除===,并按需解决代码错误(这个过程可以参考远程代码决定冲突代码的去留)。直到没有红色感叹号(error):

(5)将冲突文件手动add到本地工作区

解决冲突后源文件以及commit列表显示的还是红色,这时候执行add操作添加到本地工作区,因为冲突文件不会自动add。

①  可以在文件中右键选择git--add,

②  也可以在命令行输入

git add .

执行后文件颜色就变正常了,不是红色了

并且在coomit里面点开,只显示本地和远程的变更,不会像之前一样显示三个窗口(left、result、right) 。

 至此,冲突解决。

2、方法2

在弹框中点击merge,选择accept yours是用你本地的覆盖git仓库的的;选择accept theirs是用git仓库的覆盖你本地的;选择merge则是合并你本地的和远程git仓库的,这时候会弹出一个对比框:

左边的是你本地的,右边的是git仓库的,中间的是最终结果,可以通过>>和×箭头来操作,表示将冲突的代码行新增或者移除。解决后点击apply会自动commit。



分割线,为了冲突最优化,以下是常见的本地操作git应该遵循的步骤:

一、unstash冲突

1、先stash本地变更
2、其他操作
3、unstash
(1)没有冲突

     unstash成功,全部自动add。

(2)出现冲突

    无冲突的文件自动add,可以在commit待提交列表看到;

    有冲突的文件不能自动add并且飘红,idea右下角会提示哪些文件冲突。

二、cherry-pick

1、筛选commit

(1)本地check out到需要提交的分支如release-wtyy;

(2)双击源分支master,列出所有commit,

选择需要从master上cherry-pick过来的commit,可以借助idea的工具,如我这里筛选了我自己提交的并且输入提交日志的关键字

2、cherry-pick

右键点击cherry-pick。表示从master上合并该commit到release-wtyy。

(1)如果没有冲突

会自动add--》并自动commit,可以在待push的列表看到;

(2)如果有冲突

冲突的文件不会自动add;其他没有冲突的文件会自动add,可以在待commit列表看到;

这里和unstash不同,即使只有一个文件冲突,该次cherry-pick的所有文件都不会自动commit。

需要解决冲突后手动commit。

三、merge代码

1、statsh本地变更
2、merge

本地check out到需要提交的分支dev-wtyy,双击源分支master。在master上右键选择merger into dev-wtyy,表示将master合并到dev-wtyy。

(1)如果没有冲突

   merger成功

(2)如果有冲突

没有冲突的文件merger成功,并且自动commit,可以在待push列表看到;

有冲突的文件不会自动add进本地缓存区。

注意:

merger等git自动化过程中,如果进程很慢,尽量也不要杀进程,防止异常,如我有次

merger master into 本地分支,强制关闭idea进程,导致没有冲突的文件没能自动commit从而在本地产生很多changes待commit。

这种特别慢的情况一般出现在:个人分支merge到master了,忘记把master merge into个人分支,而是继续提交代码,这时才merge master into个人分支,这时候特别慢。

4、unstash

merger后,unstash本地变更,这时也可能会有冲突。

没有冲突的会自动add进入到commit列表;

有冲突的会有提示哪些文件有冲突,同样进入到源文件,按照上面的方法解决后,手动add,即可在commit列表看到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值