上篇文章把平常最最最经常用到的一些命令,但是基本是常规情况下,接下来讲讲不太正常情况下的命令。
首先,我们在本地最直接接触的是远程自己仓库,至于远程别人的仓库(大家共同修改文件的仓库,后文简称远程仓库)主要是通过远程自己的仓库进行mr。
那么我们如何保证自己的仓库里面有别人的修改呢
可以看到远程仓库里面有个others.txt文件,而本地是没有的,为了能让本地和远程仓库同步,就需要用到pull
和push是对应的,一般后面也会跟着远程仓库的地址(上一篇文章中简单地说了下如何设置不同的远程仓库的地址)
可以发现本地也已经有了新增的文件。注意,我们修改的文件也是在远程仓库中的,那如果别人觉得我们的文件写得不够好然后修改了。
就比如上次提交的helloworld,觉得不行,太简单了,只打印了一次,然后加了个for循环打印了100次,并且在每次打印后面加上序号。
于此同时,我们也觉得代码也得不够好,需要重复执行1000遍,并且想在输出完后再来一句经典台词,于是乎我们改了本地的代码。
接着心高彩烈地push了代码,并且提起了Merge Request,也有的平台称为Pull Request,这时候就会发现
有告警此Pull Request无法自动合并,你应该手动合并它
,其实就是你和其他人同时修改了文件中的统一行,冲突了。之后就得是解决冲突,不同平台的解决冲突的界面应该不同,但是本质都是git。
此时就需要到程序员之间讨(撕)论(b),究竟是以谁的为准,这里假设这种,保持后面的i + 1
但是需要循环1000次。所以就需要修改为
其实这个文件的代码原则上你删了都没关系,因为git已经跟你说这个文件有冲突了,至于如何选择,需要保留什么,git觉得我们会处理好的。当完成这一切之后就和之前的mr是一致的,审核通过就可以合入了
但是在mr的时候再去解决冲突,总感觉有点麻烦,所以一般工作中常用的做法就是在commit之后,先pull一下最新代码
可以看到远程的仓库此时是这样滴
「然后远程对文件进行了修改,模拟其他同事合入了新代码」
同样在不知道的情况下,我们想要添加一个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就是把本地的所修改的先放在一个git的“堆栈”中,本地对远程就是未修改的状态,然后就能正常的pull
使用git stash save [save message]
来暂存改变之后,能够成功的pull下来,接下来看下git的状态
既然能保存,那肯定能取出来,上面也说过,如果你save的文件和远程仓库修改的文件一样,那么pop出来的时候肯定会有冲突
解决方案同样是处理冲突,这里就不再赘述了
第一篇文章中有说到根据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的两个文件现在已经变成了待提交的状态。
「创作不易,如果对你有帮助,欢迎点赞,收藏和分享啦!」
「下面是个人公众号,有兴趣的可以关注一下,说不定就是你的宝藏公众号哦!!!」