关于git:淦冲突的时候同事非得说他才是对的怎么办

51次阅读

共计 2206 个字符,预计需要花费 6 分钟才能阅读完成。

上篇文章把平时最最最常常用到的一些命令,然而根本是惯例状况下,接下来讲讲不太失常状况下的命令。

首先,咱们在本地最间接接触的是近程本人仓库,至于近程他人的仓库(大家独特批改文件的仓库,后文简称近程仓库)次要是通过近程本人的仓库进行 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 的两个文件当初曾经变成了待提交的状态。

创作不易,如果对你有帮忙,欢送点赞,珍藏和分享啦!

上面是集体公众号,有趣味的能够关注一下,说不定就是你的宝藏公众号哦!!!

正文完
 0