淦,冲突的时候,同事非得说他才是对的怎么办

cutey_none -
淦,冲突的时候,同事非得说他才是对的怎么办

上篇文章把平常最最最经常用到的一些命令,但是基本是常规情况下,接下来讲讲不太正常情况下的命令。

首先,我们在本地最直接接触的是远程自己仓库,至于远程别人的仓库(大家共同修改文件的仓库,后文简称远程仓库)主要是通过远程自己的仓库进行mr。

那么我们如何保证自己的仓库里面有别人的修改呢

pull

可以看到远程仓库里面有个others.txt文件,而本地是没有的,为了能让本地和远程仓库同步,就需要用到pull

和push是对应的,一般后面也会跟着远程仓库的地址(上一篇文章中简单地说了下如何设置不同的远程仓库的地址)

mr时conficts

可以发现本地也已经有了新增的文件。注意,我们修改的文件也是在远程仓库中的,那如果别人觉得我们的文件写得不够好然后修改了。

就比如上次提交的helloworld,觉得不行,太简单了,只打印了一次,然后加了个for循环打印了100次,并且在每次打印后面加上序号。

于此同时,我们也觉得代码也得不够好,需要重复执行1000遍,并且想在输出完后再来一句经典台词,于是乎我们改了本地的代码。

接着心高彩烈地push了代码,并且提起了Merge Request,也有的平台称为Pull Request,这时候就会发现

有告警此Pull Request无法自动合并,你应该手动合并它 ,其实就是你和其他人同时修改了文件中的统一行,冲突了。之后就得是解决冲突,不同平台的解决冲突的界面应该不同,但是本质都是git。

此时就需要到程序员之间讨(撕)论(b),究竟是以谁的为准,这里假设这种,保持后面的i + 1 但是需要循环1000次。所以就需要修改为

其实这个文件的代码原则上你删了都没关系,因为git已经跟你说这个文件有冲突了,至于如何选择,需要保留什么,git觉得我们会处理好的。当完成这一切之后就和之前的mr是一致的,审核通过就可以合入了

但是在mr的时候再去解决冲突,总感觉有点麻烦,所以一般工作中常用的做法就是在commit之后,先pull一下最新代码

pull时conflicts

可以看到远程的仓库此时是这样滴

然后远程对文件进行了修改,模拟其他同事合入了新代码

同样在不知道的情况下,我们想要添加一个getStr的方法,并且在main函数里面调用

编辑完后正常add,commit,但是不要push,先pull一下远程仓库的代码

在最后可以看到一个这样的信息,就是让我们解决冲突

Auto-merging hello.java
CONFLICT (content): Merge conflict in hello.java
Automatic merge failed; fix conflicts and then commit the result.

如何解决呢,就是编辑冲突的文件即可,用vim来看下冲突的文件此时长啥样

只需要把<<<<<<<=======>>>>>>> 还有HEAD这些非我们想要的字符删掉,然后保留需要的代码,最后就正常add commit push mr即可。

这时候肯定会有刚学的小伙伴就问了,那如果改的期间别的人又往仓库中合入了代码咋办呢

开玩笑开玩笑,但是这种情况99.99%只会存在在理论中,现实工作中基本不会出现,如果恰巧碰到了那就再解决冲突呗。

stash我们修改了多个文件比如修改了ABCDEF...Z这26个文件主管就过来说有个模块非常急,需要先合入ABCD这4个文件远程仓库已经有人合入了LX这两个文件然后记得养成良好的习惯,commit后pull一下远程代码库

总结就是不想提交所有修改的文件,且修改的文件中有冲突的情况下

意思就是,本地有些文件可能在合入的时候被覆写,此时有两种选择

commit,然后解决冲突stash,然后pull下来,之后stash pop的时候如果有冲突,解决冲突

stash就是把本地的所修改的先放在一个git的“堆栈”中,本地对远程就是未修改的状态,然后就能正常的pull

使用git stash save [save message] 来暂存改变之后,能够成功的pull下来,接下来看下git的状态

既然能保存,那肯定能取出来,上面也说过,如果你save的文件和远程仓库修改的文件一样,那么pop出来的时候肯定会有冲突

解决方案同样是处理冲突,这里就不再赘述了

reset

第一篇文章中有说到根据status中的提示,add和commit都可以回撤,那push后肯定也有对应的操作。

可以看到至少有两个文件是在本次的push中进行的,要想撤回push,首先得知道push了啥,都有哪些push

通过git log来查看,但是git log有很多骚操作(就是美化),最常用的就是以下几种

啥都不加,输出全部且冗长

输出前几个,git log -p

单行输出,git log --oneline

当然是可以组合的,git log --oneline -2 自然就是单行输出前2条记录。

不难看到,每次的提交主题都是一串数字(版本号)和commit时候的消息,当我们想回退到其他版本的时候,就可以git reset [版本号] 即可。我知道网上关于reset也有很多骚操作,回退前多少次啥的,但是都不如查看版本号回退来得好使,非要用的时候查一下就好了。

加入我要回退到上个版本,只需要这样做

可以看到原本push的两个文件现在已经变成了待提交的状态。

创作不易,如果对你有帮助,欢迎点赞,收藏和分享啦!

下面是个人公众号,有兴趣的可以关注一下,说不定就是你的宝藏公众号哦!!!

特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

gitjava后端svngithub

扩展阅读

加个好友,技术交流

1628738909466805.jpg