首页 > 其他分享 >一文理解GIT的代码冲突

一文理解GIT的代码冲突

时间:2023-08-09 18:35:04浏览次数:38  
标签:GIT develop 一文 仓库 代码 master 冲突 分支

对于GIT,不知道有没有人和我一样,很长时间都是小心翼翼、紧张兮兮,生怕一不小心,自己辛苦写的代码没了。

特别是代码冲突,更是难到我无法理解,每次都要求助于百度,跟着人家的教程一步步解决,下一次还是这样。

所有的紧张、不自信、不敢用、用不好,都来源于:不理解

只要理解了,你会发现所有问题一下子没了,所有焦虑一下子释然,你变的自信而坚定。

接下来说一下我对GIT代码冲突的理解,希望能帮助到你。


GIT的代码冲突主要存在于两个地方:

(1)本地仓库和远程仓库之间

场景一般是:你从远程仓库拉取了代码开始开发,在这期间,有同事提交了代码,等你提交时,报错不让你提交了。

(2)本地的分支之间

场景一般是:你从master分支拉出了develop分支,在develop分支上开发,在这期间,各种原因,master分支发生了变化。等你想把develop分支合并到master分支,提示代码冲突。

 

其实,本质都是一样的,我们用一个简单的模型来解释,为什么会出现代码冲突。

(1)没有冲突的场景:

我们把A仓库(分支)的代码拉取到B仓库(分支),一顿开发后,向A提交。

这么做一点问题都没有,既然你是在我之上修改的船新版本,很好,一切以你为准,没问题。

(2)冲突来了:

我们把A仓库(分支)的代码拉取到B仓库(分支),在我们开发的过程中,A发生了变化(不管什么原因),开发完成后我们再向A提交。

不用说GIT,我们自己都会觉得这事儿有问题。

我们俩都是在老代码之上修改的船新版本,那么以谁为准啊?咱俩改的不是一个地方还好说,如果改的是同一个地方,那么GIT根本没法自己判断选择哪一个。

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

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

 

第一种方式:B仍然向A提交代码,A进行代码合并、处理冲突后,B再把A的代码拉过来,A和B都是最新版本了。

我们分别看一下采用这种方式,两种冲突场景各自是怎么处理的。

(1)远程仓库和本地仓库的冲突

在这种场景下,可以这么做吗?

显然,不行。因为远程仓库那边,没有人会给你处理冲突。所以远程仓库对于这种方式,是直接拒绝的,只能采用第二种了。

(2)本地分支之间的冲突

远程仓库不允许,本地分支却可以,因为都是在我们本地,程序员可以处理冲突。

一般对于本地分支的冲突,我们也是这么做的。master分支把develop分支merge过来,处理完冲突后,develop分支再把master分支merge回来,这样俩分支都是最新版本了。当然如果develop分支不需要了,你直接删了也可以。

 

第二种方式:B先拉取A的代码,在本地处理冲突后,再把代码提交给A,这样A和B都是最新版本了。

我们再来看一下采用这种方式,两种冲突场景各自是怎么处理的。

(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分支。

(1)git merge master。把master分支合并过来,没有冲突最好,有冲突处理冲突。

(2)git switch master。切换回master分支。

(3)git merge develop。把develop分支合并过来。

 

标签:GIT,develop,一文,仓库,代码,master,冲突,分支
From: https://www.cnblogs.com/luzeyu/p/17617573.html

相关文章

  • 每个微服务对应一个代码库吗?
    你是把每个微服务放在它自己的git存储库中,还是使用monorepo?如果是后者,您如何在同一个repo中处理多个服务?回答1.我一直为每个服务使用一个repo,但这主要是因为我们在工作中使用maven和GitHub。我发现monorepo的想法很有趣,但我一直无法找到正确的工具,也不想花时间自己动......
  • prompt gating代码探索
    importtorchdefpromptGating(gating,adding,x):'''gating:(num_prefix,dim)adding:(num_prefix,dim)x:(seq_length,batch_size,dim)'''ifgatingisnotNone:gating=gating.unsque......
  • GIT协作流程规范
    分支模型集中式的分支模型 目前团队使用的模式属于老旧的集中式分支模型,简单的总结就是:开发时: 团队的所有成员都在dev分支上开发(也支持少部分的特性分支feature-xxx)。测试时: 当功能需要上测试环境测试时,把dev合并到test分支,使用test分支在测试环境中测试。灰度时: 在发......
  • Ubuntu gitlab 磁盘扩容记录
    使用vgdisplay命令查看剩余LVM卷组信息,利用lvextend命令进行扩容,最后使用resize2fs命令直接执行vgdisplaylvresize-l+100%FREE/dev/mapper/ubuntu--vg-ubuntu--lv//按百分比扩容resize2fs/dev/mapper/ubuntu--vg-ubuntu--lv引用:https://www.cnblogs.com/gcc2020/p/......
  • 使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法
    前言在网上也是查看了很多关于crc16校验的文章,但是好像都是对于有基础的人看的,我当时拿起直接使用,发现行不通,这对于零基础的不是很友好,所以决定贡献一篇,哈哈哈哈~~~publicuintCalcCRC16(stringhexCommand){byte[]pBuf=HexStringToByteArray(......
  • 数字时代的生产力工具:低代码开发平台
    产业新周期背景下,最终用户的需求在快速变化并充满不确定性,企业所面临的市场竞争关系正从企业间转向产业链的全面竞争,传统企业数字化转向也逐渐由内向外,转向实现全产业链的数字化能力构建与连接。前瞻的传统企业正在加速推进数字化转型,试图通过借助新一代生产力工具,支撑创新业务快速......
  • 最新版Idea(2022.1及更高版本)显示Git提交人信息
    最新版Idea(2022.1及更高版本)显示Git提交人信息这是新版idea自带的所以不需要安装什么插件,相关设置如下:Preferences->Editor->InlayHints->Codevision还可以显示类的继承者等等,就是在代码上边有一个小标签,这个标签不占用代码行数。我感觉这个功能最方便的是可以显示出gi......
  • 200多个js技巧代码
    1.文本框焦点问题onBlur:当失去输入焦点后产生该事件onFocus:当输入获得焦点后,产生该文件Onchange:当文字值改变时,产生该事件Onselect:当文字加亮后,产生该文件<inputtype="text"value="mm"οnfοcus="if(value=='mm){value=''}"οnblur="if(value==''){va......
  • Java源代码是如何编译,加载到内存中的?
    1.前言相信许多开发同学看过《深入理解java虚拟机》,也阅读过java虚拟机规范,书籍和文档给人的感觉不够直观,本文从一个简单的例子来看看jvm是如何工作的吧。本文所有操作均在mac上进行。2.示例代码示例代码采用最常见的双重检索单例模式:packageinterview.desginpattern.single......
  • Wordpress:如何放置谷歌GTM代码?
    使用Wordpress建站需要应用谷歌的GTM代码进行监测用户行为,那么如何安装GTM代码呢?分为两种,一.使用插件进行安装二.直接编辑代码Header模块进行安装。先看看谷歌GTM的安装要求:注意:1.script部分需要安装在head标签之内;2.noscript部分需要安装在body开始标签之后。 方法一......