一文理解GIT的代码冲突
对于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的代码冲突的更多相关文章
- git解决代码冲突
1.当项目开发是几个人的时候,难免会出现代码冲突,使用git命令行解决冲突的方法如下: git checkout develop git pullgit checkout feature/新建会员功能 ...
- 怎样解决git提交代码冲突
当我们使用git提交代码时,别人可能也同一时候改动了我们改动的文件,可是别人的先合入到配置库里边,这样当我们的提交要合入时.就会产生冲突,能够使用下面步骤来解决冲突: (1) git rebase ...
- git pull代码冲突。怪异问题,了解一下
当远程仓库代码与本地代码产生冲突,无法 pull,且决定放弃本地代码的时候. 或者, 碰见我这种不知道什么问题的情况, pull 成功了,但是远程仓库代码和本地代码竟然也不一样. 天呐,网管常规操作, ...
- Git提交代码冲突:commit your changes or stash them before you can merge.
用git pull拉取远程分支代码时候遇到如下问题: error: Your local changes to the following files would be overwritten by ...
- git提交代码冲突解决
1.git stash save "说明信息" 2.git stash lish 3.git pull 4.git stash pop stash@{编号}
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突
Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突 这篇是接着上篇分布式版本库--Windows下G ...
- git 代码冲突处理
在使用git pull代码时,经常会碰到有冲突的情况,提示如下信息: error: Your local changes to 'c/environ.c' would be overwritten b ...
- Git:代码冲突常见解决方法
摘自: http://blog.csdn.net/iefreer/article/details/7679631 如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候, ...
- Eclipse 的 git 插件操作 "代码提交"以及"代码冲突"
面向对象:曾经使用过SVN的同学. (因为Git 它 可以说是双重的SVN (本地一个服务器,远程一个服务器)),提交代码要有两次步骤,先提交到本地服务器,再把本地服务器在提交到远程服务器. 所以连S ...
- git如何解决冲突(代码托管在coding)
分支A提交合并请求到分支B,有冲突 git fetch code 拉取远程仓库的其他分支代码(我拉代码是remote add code所以这里是code,可以用git remote查看) git ch ...
随机推荐
- 2022-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最
2022-04-25:给定两个长度为N的数组,a[]和b[] 也就是对于每个位置i来说,有a[i]和b[i]两个属性 i a[i] b[i] j a[j] b[j] 现在想为了i,选一个最好的j位置, ...
- 2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1、a2、…、an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成
2023-01-02:某天,小美在玩一款游戏,游戏开始时,有n台机器, 每台机器都有一个能量水平,分别为a1.a2.-.an, 小美每次操作可以选其中的一台机器,假设选的是第i台, 那小美可以将其变成 ...
- 2021-05-18:Nim博弈。给定一个正数数组arr,先手和后手每次可以选择在一个位置拿走若干值, 值要大于0,但是要小于该处的剩余。谁最先拿空arr,谁赢。根据arr,返回谁赢 。
2021-05-18:Nim博弈.给定一个正数数组arr,先手和后手每次可以选择在一个位置拿走若干值, 值要大于0,但是要小于该处的剩余.谁最先拿空arr,谁赢.根据arr,返回谁赢 . 福大大 答案 ...
- 2021-08-14:给定两个字符串S和T,返回S的所有子序列中有多少个子序列的字面值等于T。
2021-08-14:给定两个字符串S和T,返回S的所有子序列中有多少个子序列的字面值等于T. 福大大 答案2021-08-14: 样本对应模型. 时间复杂度:O(N^2). 空间复杂度:O(N^2) ...
- 洛谷P3374 【模板】树状数组 1-(单点修改,区间查询)
题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数. 第二行包含 n 个 ...
- Charles一文全明白
自从用上了Mac本,抓包工具也从Fiddler换成了Charles,用了这么长时间,也是该对Charles做一个总结了,避免自己下次配置的时候又忘记怎么操作 1.Charles是什么? Charles ...
- 反向传播(Backpropagation)相关思想
在前面我们学习了SVM损失函数和softmax损失函数,我们优化权重矩阵w的具体思路便是让损失函数最小化,还记得损失函数的定义吗? 没错,损失函数长这样,其中,Wj为权重矩阵的第j个列向量,xi为第i ...
- IntelliJ IDEA 最新激活码:2023、2022及以下版本通用(亲测有效)
分享一下 IntelliJ IDEA 2023.1 最新激活注册码,破解教程如下,可免费永久激活,亲测有效,下面是详细文档哦~ 申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络, ...
- 为teamcity的代码语法检查工具pyflakes增加支持python2和python3
TeamCity和pyflakes TeamCity是一款由JetBrains公司开发的持续集成和部署工具,它提供了丰富的功能来帮助团队协作进行软件开发.其中包括代码检查.自动化构建.测试运行.版本控 ...
- Java的先行发生原则
先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则.依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定 ...