一文理解GIT的代码冲突

云儿
• 阅读 425

对于GIT,不知道有没有人和我一样,很长时间都是小心翼翼、紧张兮兮,生怕一不小心,自己辛苦写的代码没了。
特别是代码冲突,更是难到我无法理解,每次都要求助于百度,跟着人家的教程一步步解决,下一次还是这样。
所有的紧张、不自信、不敢用、用不好,都来源于:不理解
只要理解了,你会发现所有问题一下子没了,所有焦虑一下子释然,你变的自信而坚定。
接下来说一下我对GIT代码冲突的理解,希望能帮助到你。


GIT的代码冲突主要存在于两个地方:
(1)本地仓库和远程仓库之间
场景一般是:你从远程仓库拉取了代码开始开发,在这期间,有同事提交了代码,等你提交时,报错不让你提交了。
(2)本地的分支之间
场景一般是:你从master分支拉出了develop分支,在develop分支上开发,在这期间,各种原因,master分支发生了变化。等你想把develop分支合并到master分支,提示代码冲突。
 
其实,本质都是一样的,我们用一个简单的模型来解释,为什么会出现代码冲突。


(1)没有冲突的场景:
一文理解GIT的代码冲突
我们把A仓库(分支)的代码拉取到B仓库(分支),一顿开发后,向A提交。
这么做一点问题都没有,既然你是在我之上修改的船新版本,很好,一切以你为准,没问题。

(2)冲突来了:
一文理解GIT的代码冲突
我们把A仓库(分支)的代码拉取到B仓库(分支),在我们开发的过程中,A发生了变化(不管什么原因),开发完成后我们再向A提交。
不用说GIT,我们自己都会觉得这事儿有问题。
我们俩都是在老代码之上修改的船新版本,那么以谁为准啊?咱俩改的不是一个地方还好说,如果改的是同一个地方,那么GIT根本没法自己判断选择哪一个。

这就是GIT的代码冲突,一句话:你跑了一趟回来(开发完成回来提交),它已经变了(相比当初拉取代码时,发生了变化)


那么,GIT是怎么处理代码冲突的呢?有两种方式:

 第一种方式:B仍然向A提交代码,A进行代码合并、处理冲突后,B再把A的代码拉过来,A和B都是最新版本了。
一文理解GIT的代码冲突
我们分别看一下采用这种方式,两种冲突场景各自是怎么处理的。

(1)远程仓库和本地仓库的冲突
在这种场景下,可以这么做吗?
显然,不行。因为远程仓库那边,没有人会给你处理冲突。所以远程仓库对于这种方式,是直接拒绝的,只能采用第二种了。

(2)本地分支之间的冲突
远程仓库不允许,本地分支却可以,因为都是在我们本地,程序员可以处理冲突。
一般对于本地分支的冲突,我们也是这么做的。master分支把develop分支merge过来,处理完冲突后,develop分支再把master分支merge回来,这样俩分支都是最新版本了。当然如果develop分支不需要了,你直接删了也可以。 


第二种方式:B先拉取A的代码,在本地处理冲突后,再把代码提交给A,这样A和B都是最新版本了。
一文理解GIT的代码冲突
我们再来看一下采用这种方式,两种冲突场景各自是怎么处理的。

(1)远程仓库和本地仓库的冲突
对于本地和远程仓库的冲突,我们一般就是这么做的。
从逻辑上讲,既然你不敢接受我的推送,是因为我不是在你的基础上修改的。那好,我提交前先拉取你的代码,主动和你拉齐,现在你的代码我都有,我就是在你的基础上修改的了,你现在可以放心的接受我的推送了吧。

(2)本地分支之间的冲突
对于分支,我们也可以按照这个思路。
先在develop上执行merge master,处理完冲突后,再切换到master,执行merge develop。这样,同样俩分支都成了最新版本。是不是发现比第一种方式更简单? 


最后总结一下:

1、本地仓库和远程仓库的冲突:
(1)git pull。没有冲突最好,有冲突处理冲突。
(2)git add -A
(3)git commit -m
(4)git push
后三步和平时提交代码一个样。所以,提交代码前先pull,是一个很有必要的好习惯。

2、本地master分支和develop分支的冲突:
(1)git switch develop。切换到develop分支。
(2)git merge master。把master分支合并过来,没有冲突最好,有冲突处理冲突。
(3)git switch master。切换回master分支。
(4)git merge develop。把develop分支合并过来。


点赞
收藏
评论区
推荐文章
放学路上 放学路上
3年前
git常见合并冲突场景以及解决办法
git很好用,但是遇到合并冲突就会很痛苦!在此之前我一直都是个人开发者,因此对git的使用也不熟悉,本文将持续总结我在使用git合并过程中遇到的冲突的场景以及产生冲突后的解决办法。如果有不足的的地方还请各位大佬指正!一、第一种情况1、场景描述:当两人都拉取了同一个分支的代码,然后两人都对代码进行了修改,假设其中一人把他修改完的代码上传到master分支,这时
Stella981 Stella981
3年前
Echarts阴影点击事件获得当前柱状图的索引值方法
最近在使用百度的echarts写股票的K线图,刚开始用遇到大堆的问题,光是为了解决这些问题都花了我一整天时间。两个论坛都发帖了,没人理。还是靠自己吧。以下代码只写了关键片段,//什么在option外面的变量varclickIndex;option{//配置信息tooltip:{
Stella981 Stella981
3年前
Sping中@Configuration@Bean如果出现bean的覆盖,会怎么处理?
前言不建议写这么奇葩的代码!!!这就有点像考试喜欢出的试题,有一堆overload和override的代码,选择题选择调用的是哪个。不建议写这种让人看着费劲的代码。问题引出言归正传,如果有一个这样的配置类,@Bean(https://my.oschina.net/bean)注解了相同name"cupc
Wesley13 Wesley13
3年前
Git中代码冲突的解决方式
使用Git管理代码,在进行代码提交的时候,如果出现了冲突该怎么办呢,下面就两种常见的冲突给出了解决方法,希望对大家有所帮助。冲突1:当你commit以后,在执行gitpullrebase的时候出现冲突,请按如下步骤解决:1 找到冲突文件,解决冲突2 执行gitaddxxx(xxx为冲突文件全路径)3 执行git
Stella981 Stella981
3年前
GitHub和SVN的区别
GitHub和SVN的区别之前用的版本控制系统是SVN,但是最近因为流行使用GitHub,这篇文章认识一下Git和SVN的区别。1)Git是分布式的,SVN不是: 这是git和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上
Stella981 Stella981
3年前
Git代码防丢指南
我们在日常使用Git的过程中经常会发生一些意外情况,如果处理不当,则可能会出现代码丢失的假象。本文将针对IDEA&Git日常开发中的一些场景,为你层层拨开迷雾,解析常见的错误及其发生原因,让你从此不再惧怕代码冲突或丢失问题。为简化问题,本文假设所有团队成员均在同一分支上开发。文中更新操作是指在IDEA中单击菜单VCS\
Stella981 Stella981
3年前
Git提交规范流程和解决冲突实际使用
前言:GIT对于我们程序员来说是吃饭的工具,本篇主要是针对提交和分支以及对于大多数程序员闻风丧胆的冲突一些个人见解,如果有啥不对的或者你们公司git提交流程欢迎下方评论。在讨论规范之前,我们需要定最基本的要求1.团队内保持良好的代码格式便于易读和维护,最主要减少不必要的代码冲突(建议统一使用开发工具(idea)的代码格式化)。2.提交任何代码必须
陈哥聊测试 陈哥聊测试
8个月前
情绪稳定!别再让Git合并冲突影响你工作了
在我看来,Git合并冲突是不可避免的。在本文,我想和大家简单分享一下遇到Git冲突该如何解决,希望对大家有所帮助。
西王母 西王母
2年前
ChatGPT写代码、写情书、写文章、做题,智星AI小助手
ChatGPT写代码、写情书、写文章、做题,智星AI小助手,首先微信搜下智星AI小助手正巧你想跟一个女孩子表白,却不知道如何开口,这时,它帮你见字如面,写一封信便缓解了你的紧张情绪...想写一封辞职信,但是不知道怎么写会显得委婉,它是这样写的:ChatGP
Git 代码分支管理 | 京东云技术团队
Git代码分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱、冲突等比较头疼的问题,我们将在文中阐述如何更好的管理代码分支。
小万哥 小万哥
1年前
Git 分支管理:优化版本控制与应急处理的关键策略
使用Git分支:轻松管理不同版本和应对紧急情况的最佳实践使用Git分支在Git中,分支是主仓库的新/独立版本。假设你有一个大型项目,需要对其进行设计更新。没有使用Git时:复制所有相关文件以避免影响实时版本开始进行设计工作,并发现代码依赖于其他文件中的代码